run static method

Future<void> run({
  1. required OnExceptionCallBack onException,
  2. required RootWidgetBuilder rootWidgetBuilder,
  3. FlutterErrorBuilder? flutterErrorBuilder,
})

Implementation

static Future<void> run({
  required OnExceptionCallBack onException,
  required RootWidgetBuilder rootWidgetBuilder,

  /// To provide custom widget for flutter errors
  /// This will override the default [ErrorWidget]
  /// https://docs.flutter.dev/testing/errors#handling-all-types-of-errors
  FlutterErrorBuilder? flutterErrorBuilder,
}) async =>
    runZonedGuarded(
      () async {
        WidgetsFlutterBinding.ensureInitialized();
        AppCubit.packageInfo = await PackageInfo.fromPlatform();
        // Does not support web https://docs.flutter.dev/testing/errors#handling-all-types-of-errors
        // https://github.com/flutter/flutter/issues/100277
        FlutterError.onError = (details, {bool forceReport = false}) {
          debugPrint('>>> ${details.exception}, ${details.stack}');
          onException(details.exception, details.stack);
        };

        ErrorWidget.builder = (FlutterErrorDetails error) {
          if (error.stack != null) {
            Zone.current.handleUncaughtError(error.exception, error.stack!);
          }

          return _buildDebugErrorWidget(
            error: error,
            flutterErrorBuilder: flutterErrorBuilder,
          );
        };

        final storage = await HydratedStorage.build(
          storageDirectory: kIsWeb
              ? HydratedStorage.webStorageDirectory
              : await getTemporaryDirectory(),
        );

        HydratedBloc.storage = storage;
        Bloc.observer = BlocExceptionObserver(onException: onException);

        runApp(
          await rootWidgetBuilder((appBuilder) => appBuilder),
        );
      },
      (exception, stackTrace) async {
        debugPrint('>>> $exception, $stackTrace');

        onException(exception, stackTrace);
      },
    );