|
1 | | -import 'dart:async'; |
2 | 1 | import 'dart:developer'; |
| 2 | +import 'dart:isolate'; |
3 | 3 |
|
4 | | -import 'package:data_providers/data_providers.dart'; |
| 4 | +import 'package:app_core/app_core.dart'; |
| 5 | +import 'package:app_ui/app_ui.dart'; |
5 | 6 | import 'package:flutter/foundation.dart'; |
6 | 7 | import 'package:flutter/widgets.dart'; |
7 | | -import 'package:shared/shared.dart'; |
8 | | -import 'package:ui_toolkit/ui_toolkit.dart'; |
| 8 | +import 'package:quizapp/app/app_bloc_observer.dart'; |
9 | 9 |
|
10 | | -Future<void> bootstrap( |
11 | | - FutureOr<Widget> Function() appDelegate, { |
12 | | - void Function(Object, StackTrace)? onZoneError, |
13 | | - FlutterExceptionHandler? onFlutterError, |
14 | | - BlocObserver? blocObserver, |
15 | | - Future<FirebaseApp> Function()? firebaseApp, |
| 10 | +Future<void> bootstrap({ |
| 11 | + required FutureOr<Widget> Function() builder, |
| 12 | + FutureOr<void> Function()? init, |
16 | 13 | }) async { |
17 | | - WidgetsFlutterBinding.ensureInitialized(); |
| 14 | + await runZonedGuarded( |
| 15 | + () async { |
| 16 | + BindingBase.debugZoneErrorsAreFatal = true; |
| 17 | + WidgetsFlutterBinding.ensureInitialized(); |
| 18 | + await init?.call(); |
18 | 19 |
|
19 | | - FlutterError.onError = onFlutterError ?? |
20 | | - (details) { |
| 20 | + FlutterError.onError = (details) { |
21 | 21 | log(details.exceptionAsString(), stackTrace: details.stack); |
22 | 22 | }; |
| 23 | + PlatformDispatcher.instance.onError = (error, stackTrace) { |
| 24 | + log(error.toString(), stackTrace: stackTrace); |
| 25 | + return true; |
| 26 | + }; |
| 27 | + Isolate.current.addErrorListener( |
| 28 | + RawReceivePort((dynamic pair) async { |
| 29 | + final errorAndStackTrace = pair as List<dynamic>; |
| 30 | + final error = errorAndStackTrace.first; |
| 31 | + final rawStackTrace = errorAndStackTrace.last; |
| 32 | + final stackTrace = rawStackTrace is StackTrace |
| 33 | + ? rawStackTrace |
| 34 | + : StackTrace.fromString(rawStackTrace.toString()); |
| 35 | + log(error.toString(), stackTrace: stackTrace); |
| 36 | + }).sendPort, |
| 37 | + ); |
23 | 38 |
|
24 | | - await (firebaseApp ?? Firebase.initializeApp)(); |
25 | | - |
26 | | - await Assets.covers.preload(); |
| 39 | + Bloc.observer = AppBlocObserver(); |
27 | 40 |
|
28 | | - if (blocObserver != null) { |
29 | | - Bloc.observer = blocObserver; |
30 | | - } |
| 41 | + await Assets.covers.preload(); |
31 | 42 |
|
32 | | - return runZonedGuarded<void>( |
33 | | - () async => runApp(await appDelegate()), |
34 | | - onZoneError ?? |
35 | | - (error, stackTrace) => log(error.toString(), stackTrace: stackTrace), |
| 43 | + final app = await builder(); |
| 44 | + runApp(app); |
| 45 | + }, |
| 46 | + (error, stackTrace) => log(error.toString(), stackTrace: stackTrace), |
36 | 47 | ); |
37 | 48 | } |
0 commit comments