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
              ? HydratedStorageDirectory.web
              : HydratedStorageDirectory(
                  (await getTemporaryDirectory()).path,
                ),
        );

        HydratedBloc.storage = storage;
        Bloc.observer = BlocExceptionObserver(onException: onException);
        final appbuilder =
            await rootWidgetBuilder((appBuilder) => appBuilder);
        if (appbuilder == null) {
          return;
        } else {
          runApp(
            appbuilder,
          );
        }
      },
      (exception, stackTrace) async {
        debugPrint('>>> $exception, $stackTrace');

        onException(exception, stackTrace);
      },
    );