diff --git a/lib/main.dart b/lib/main.dart index 5d2ece890..7a24f5a62 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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 { diff --git a/lib/main/utils/app_logger.dart b/lib/main/utils/app_logger.dart new file mode 100644 index 000000000..6c5bfbfc6 --- /dev/null +++ b/lib/main/utils/app_logger.dart @@ -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 { + _Dispatcher(String value) : super(value); +} \ No newline at end of file