import 'dart:async'; import 'dart:developer'; import 'package:bloc/bloc.dart'; import 'package:flutter/widgets.dart'; class AppBlocObserver extends BlocObserver { const AppBlocObserver(); @override void onChange(BlocBase bloc, Change change) { super.onChange(bloc, change); log('onChange(${bloc.runtimeType}, $change)'); } @override void onError(BlocBase bloc, Object error, StackTrace stackTrace) { log('onError(${bloc.runtimeType}, $error, $stackTrace)'); super.onError(bloc, error, stackTrace); } } Future bootstrap(FutureOr Function() builder) async { FlutterError.onError = (details) { log(details.exceptionAsString(), stackTrace: details.stack); }; Bloc.observer = const AppBlocObserver(); // Add cross-flavor configuration here WidgetsFlutterBinding.ensureInitialized(); runApp(await builder()); }