Save exceptions locally

OmarHatem committed Nov 23, 2022 at 23:02 UTC 68c20641b959844bb5495e48126190bfb69d8c05
1 file changed +31 -4
lib/main.dart
+31 -4
@@ -1,4 +1,7 @@
1 import 'dart:async';
2 +import 'dart:convert';
3 +import 'dart:io';
4 +import 'dart:isolate';
5 import 'package:cake_wallet/bitcoin/bitcoin.dart';
6 import 'package:cake_wallet/entities/language_service.dart';
7 import 'package:cake_wallet/buy/order.dart';
@@ -46,11 +49,24 @@ Future<void> main() async {
49 await runZonedGuarded(() async {
50 WidgetsFlutterBinding.ensureInitialized();
51
49 - // FlutterError.onError = ;
52 + FlutterError.onError = (errorDetails) {
53 + _saveException(errorDetails.exception.toString(), errorDetails.stack);
54 + };
55
51 - // Isolate.current.addErrorListener(RawReceivePort((pair) async {
52 - // final List<dynamic> errorAndStacktrace = pair;
53 - // }).sendPort);
56 + PlatformDispatcher.instance.onError = (error, stack) {
57 + _saveException(error.toString(), stack);
58 + return true;
59 + };
60 +
61 + Isolate.current.addErrorListener(RawReceivePort((pair) async {
62 + final errorAndStacktrace = pair as List<String?>;
63 + _saveException(
64 + errorAndStacktrace.first,
65 + errorAndStacktrace.last == null
66 + ? null
67 + : StackTrace.fromString(errorAndStacktrace.last!),
68 + );
69 + }).sendPort);
70
71 final appDir = await getApplicationDocumentsDirectory();
72 await Hive.close();
@@ -151,6 +167,17 @@ Future<void> main() async {
167 });
168 }
169
170 +void _saveException(String? error, StackTrace? stackTrace) async {
171 + final file = File('/error.txt');
172 + final exception = {
173 + "${DateTime.now()}": {
174 + "error": error,
175 + "stackTrace": stackTrace.toString(),
176 + }
177 + };
178 + await file.writeAsString(jsonEncode(exception), mode: FileMode.append);
179 +}
180 +
181 Future<void> initialSetup(
182 {required SharedPreferences sharedPreferences,
183 required Box<Node> nodes,