Add initial alert for errors

OmarHatem committed Nov 29, 2022 at 14:03 UTC 03ea516e63384b9b5e4d28d4d483ddbf875dc36f
1 file changed +41 -35
lib/main.dart
+41 -35
@@ -9,8 +9,10 @@ import 'package:cake_wallet/entities/preferences_key.dart';
9 import 'package:cake_wallet/ionia/ionia_category.dart';
10 import 'package:cake_wallet/ionia/ionia_merchant.dart';
11 import 'package:cake_wallet/src/screens/failure_page.dart';
12 +import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
13 import 'package:cake_wallet/store/yat/yat_store.dart';
14 import 'package:cake_wallet/themes/theme_list.dart';
15 +import 'package:cake_wallet/utils/show_pop_up.dart';
16 import 'package:flutter/foundation.dart';
17 import 'package:flutter/material.dart';
18 import 'package:flutter/services.dart';
@@ -53,13 +55,19 @@ Future<void> main() async {
55 WidgetsFlutterBinding.ensureInitialized();
56
57 FlutterError.onError = (errorDetails) {
56 - print("@@@@@@@@@@@@@@@");
57 - print("FlutterError.onError");
58 - print(errorDetails);
58 + print("@@@@@@@@@@@@@@@@@ in on error");
59 + print(errorDetails.exception.toString());
60 + _onError(errorDetails);
61 _saveException(errorDetails.exception.toString(), errorDetails.stack);
62 };
63
64 ErrorWidget.builder = (errorDetails) {
65 + print("@@@@@@@@@@@@@@@@@ in widget error");
66 + // TODO: uncomment
67 + // if (kDebugMode) {
68 + // return ErrorWidget(errorDetails.exception);
69 + // }
70 +
71 return FailurePage(
72 error: errorDetails.exception.toString(),
73 stackTrace: errorDetails.stack,
@@ -161,38 +169,8 @@ Future<void> main() async {
169 initialMigrationVersion: 17);
170 runApp(App());
171 }, (error, stackTrace) async {
164 - print("@@@@@@@@@@@@@@@@");
165 - print(error);
166 - print(stackTrace);
167 - _saveException(error.toString(), stackTrace);
168 - // TODO: this will trigger even there is no fatal error occurred so better not build a new app instance
169 - // final sharedPreferences = await SharedPreferences.getInstance();
170 - // final theme = ThemeList.deserialize(
171 - // raw: sharedPreferences.getInt(PreferencesKey.currentTheme) ?? 0);
172 - //
173 - // final savedLanguageCode =
174 - // sharedPreferences.getString(PreferencesKey.currentLanguageCode) ??
175 - // await LanguageService.localeDetection();
176 - // runApp(
177 - // MaterialApp(
178 - // debugShowCheckedModeBanner: true,
179 - // theme: theme.themeData,
180 - // localizationsDelegates: [
181 - // S.delegate,
182 - // GlobalCupertinoLocalizations.delegate,
183 - // GlobalMaterialLocalizations.delegate,
184 - // GlobalWidgetsLocalizations.delegate,
185 - // ],
186 - // supportedLocales: S.delegate.supportedLocales,
187 - // locale: Locale(savedLanguageCode),
188 - // home: Scaffold(
189 - // body: FailurePage(
190 - // error: error.toString(),
191 - // stackTrace: stackTrace,
192 - // ),
193 - // ),
194 - // ),
195 - // );
172 + print("@@@@@@@@@@@@@@@@ in run zone guard");
173 + _onError(FlutterErrorDetails(exception: error, stack: stackTrace));
174 });
175 }
176
@@ -210,6 +188,34 @@ void _saveException(String? error, StackTrace? stackTrace) async {
188 await file.writeAsString(jsonEncode(exception), mode: FileMode.append);
189 }
190
191 +void _onError(FlutterErrorDetails details) {
192 + print("#############");
193 + print(details.exception.toString());
194 + WidgetsBinding.instance.addPostFrameCallback(
195 + (timeStamp) {
196 + showPopUp<void>(
197 + context: navigatorKey.currentContext!,
198 + builder: (context) {
199 + return AlertWithTwoActions(
200 + isDividerExist: true,
201 + alertTitle: S.of(context).error,
202 + alertContent: "Oops, we got some error.\n\nPlease send crash report to our support team to make the application better.",
203 + rightButtonText: S.of(context).send,
204 + leftButtonText: "Don't send",
205 + actionRightButton: () async {
206 + Navigator.of(context).pop();
207 + },
208 + actionLeftButton: () {
209 + Navigator.of(context).pop();
210 + _saveException(details.exception.toString(), details.stack);
211 + },
212 + );
213 + },
214 + );
215 + },
216 + );
217 +}
218 +
219 Future<void> initialSetup(
220 {required SharedPreferences sharedPreferences,
221 required Box<Node> nodes,