forked from BasedHardware/omi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger.dart
More file actions
92 lines (74 loc) · 2.81 KB
/
Copy pathlogger.dart
File metadata and controls
92 lines (74 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import 'package:flutter/material.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:intercom_flutter/intercom_flutter.dart';
import 'package:talker_flutter/talker_flutter.dart';
import 'package:omi/utils/debug_log_manager.dart';
import 'package:omi/utils/l10n_extensions.dart';
class CrashlyticsTalkerObserver extends TalkerObserver {
CrashlyticsTalkerObserver();
@override
void onError(err) {
FirebaseCrashlytics.instance.recordError(err.error, err.stackTrace, reason: err.message);
}
@override
void onException(err) {
FirebaseCrashlytics.instance.recordError(err.exception, err.stackTrace, reason: err.message);
}
}
class Logger {
final crashlyticsTalkerObserver = CrashlyticsTalkerObserver();
late final talker = TalkerFlutter.init(observer: crashlyticsTalkerObserver);
Logger._();
static final Logger _instance = Logger._();
static Logger get instance => _instance;
static void log(dynamic message) {
instance.talker.log(message);
}
static void error(dynamic message) {
instance.talker.error(message);
DebugLogManager.logError(message);
}
static void warning(dynamic message) {
instance.talker.warning(message);
DebugLogManager.logWarning(message.toString());
}
static void info(dynamic message) {
instance.talker.info(message);
}
static void debug(dynamic message) {
instance.talker.debug(message);
}
static void handle(dynamic exception, StackTrace? stackTrace, {String? message}) {
instance.talker.handle(exception, stackTrace, message ?? 'An error occurred. Please try again later.');
DebugLogManager.logError(exception, stackTrace, message);
}
}
class LoggerSnackbar extends StatelessWidget {
final TalkerError? error;
final TalkerException? exception;
const LoggerSnackbar({super.key, this.error, this.exception}) : assert(error != null || exception != null);
@override
Widget build(BuildContext context) {
final data = error ?? exception!;
return Container(
width: double.infinity,
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(color: Colors.red, borderRadius: BorderRadius.circular(10)),
child: ListTile(
contentPadding: const EdgeInsets.all(0),
leading: const Icon(Icons.error_outline, color: Colors.white),
title: Text(
data.message ?? context.l10n.somethingWentWrongTryAgain,
style: const TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
trailing: IconButton(
icon: const Icon(Icons.share, color: Colors.white),
onPressed: () async {
// TODO: Have a custom form which can be prefilled with the error stack trace instead of opening the Gleap Homepage
await Intercom.instance.displayMessenger();
},
),
),
);
}
}