Add trigger logger for handling errors in Flutter

This commit is contained in:
dab246
2022-02-11 15:21:51 +07:00
committed by Dat H. Pham
parent 2810b03a35
commit 1d08fc9ddb
2 changed files with 41 additions and 4 deletions
+7 -4
View File
@@ -7,12 +7,15 @@ import 'package:tmail_ui_user/main/bindings/main_bindings.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations_delegate.dart';
import 'package:tmail_ui_user/main/pages/app_pages.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/utils/app_logger.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await MainBindings().dependencies();
await HiveCacheConfig().setUp();
runApp(TMailApp());
initLogger(() async {
WidgetsFlutterBinding.ensureInitialized();
await MainBindings().dependencies();
await HiveCacheConfig().setUp();
runApp(TMailApp());
});
}
class TMailApp extends StatelessWidget {
+34
View File
@@ -0,0 +1,34 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
_Dispatcher logHistory = _Dispatcher("");
void log(String? value) {
String v = value ?? "";
logHistory.value = v + "\n" + logHistory.value;
if (kReleaseMode == false) {
print(v);
}
}
void logError(String? value) => log("[ERROR] " + (value ?? ""));
// Take from: https://flutter.dev/docs/testing/errors
void initLogger(VoidCallback runApp) {
runZonedGuarded(() async {
WidgetsFlutterBinding.ensureInitialized();
FlutterError.onError = (FlutterErrorDetails details) {
FlutterError.dumpErrorToConsole(details);
logError(details.stack.toString());
};
runApp.call();
}, (Object error, StackTrace stack) {
logError(stack.toString());
});
}
class _Dispatcher extends ValueNotifier<String> {
_Dispatcher(String value) : super(value);
}