@@ -22,44 +22,73 @@ class AppBlocObserver extends BlocObserver {
2222
2323 @override
2424 void onError (BlocBase <dynamic > bloc, Object error, StackTrace stackTrace) {
25+ Sentry .captureException (
26+ error,
27+ stackTrace: stackTrace,
28+ );
29+
2530 log ('onError(${bloc .runtimeType }, $error , $stackTrace )' );
2631 super .onError (bloc, error, stackTrace);
2732 }
2833}
2934
3035Future <void > bootstrap (
36+ ISentrySpan span,
3137 FutureOr <Widget > Function (
3238 FlutterSecureStorage secureStorage,
3339 SettingsBloc settingsBloc,
3440 ) builder,
3541) async {
36- SentryWidgetsFlutterBinding .ensureInitialized ();
42+ final widgetFlutterBindingSpan = span.startChild (
43+ 'initialize SentryWidgetsFlutterBinding' ,
44+ description: 'calls SentryWidgetsFlutterBinding.ensureInitialized()' ,
45+ );
46+
47+ // Ensure SentryWidgetsFlutterBinding is initialized
48+ try {
49+ SentryWidgetsFlutterBinding .ensureInitialized ();
50+ } catch (e) {
51+ widgetFlutterBindingSpan
52+ ..throwable = e
53+ ..status = const SpanStatus .notFound ();
54+ } finally {
55+ await widgetFlutterBindingSpan.finish ();
56+ }
57+
3758 FlutterError .onError = (details) {
38- // TODO: Add Sentry error reporting
39- /*
4059 Sentry .captureException (
4160 details,
4261 stackTrace: details.stack,
4362 );
44- */
4563
4664 log (details.exceptionAsString (), stackTrace: details.stack);
4765 };
4866
4967 // Initialize local storage repository
5068 // final localStorage = LocalStorage(sharedPreferences);
5169
70+ final secureStorageBinding = span.startChild (
71+ 'retrieve secure storage values' ,
72+ description: 'retrieve required startup values from secure storage' ,
73+ );
5274 // Initialize secure storage
5375 const secureStorage = FlutterSecureStorage ();
54-
55- // Create a random salt if it doesn't exist.
56- final salt = await secureStorage.read (key: KeyNameConstants .md5Salt);
57- if (salt == null || salt.isEmpty) {
58- // Create a random salt and store it in secure storage
59- await secureStorage.write (
60- key: KeyNameConstants .md5Salt,
61- value: DateTime .now ().millisecondsSinceEpoch.toString (),
62- );
76+ try {
77+ // Create a random salt if it doesn't exist.
78+ final salt = await secureStorage.read (key: KeyNameConstants .md5Salt);
79+ if (salt == null || salt.isEmpty) {
80+ // Create a random salt and store it in secure storage
81+ await secureStorage.write (
82+ key: KeyNameConstants .md5Salt,
83+ value: DateTime .now ().millisecondsSinceEpoch.toString (),
84+ );
85+ }
86+ } catch (e) {
87+ secureStorageBinding
88+ ..throwable = e
89+ ..status = const SpanStatus .internalError ();
90+ } finally {
91+ await secureStorageBinding.finish ();
6392 }
6493
6594 // Initialize settings bloc
0 commit comments