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,