runDecoratedApp function

Future<void> runDecoratedApp({
  1. required FutureOr<void> appRunner(),
  2. FutureOr<void> beforeApp()?,
  3. FutureOr<void> afterApp()?,
  4. FutureOr<void> onError(
    1. Object,
    2. StackTrace
    )?,
  5. Color? statusBarColor,
  6. Color? systemNavigationBarColor,
  7. Color? systemNavigationBarDividerColor,
  8. Brightness? statusBarBrightness,
  9. Brightness? statusBarIconBrightness,
  10. Brightness? systemNavigationBarIconBrightness,
  11. bool? systemNavigationBarContrastEnforced,
  12. bool? systemStatusBarContrastEnforced,
  13. bool zoned = true,
  14. bool isTest = false,
  15. @Deprecated('已无作用') bool withFileLogger = true,
})

运行app

Implementation

Future<void> runDecoratedApp({
  required FutureOr<void> Function() appRunner,
  FutureOr<void> Function()? beforeApp,
  FutureOr<void> Function()? afterApp,
  FutureOr<void> Function(Object, StackTrace)? onError,
  Color? statusBarColor,
  Color? systemNavigationBarColor,
  Color? systemNavigationBarDividerColor,
  Brightness? statusBarBrightness,
  Brightness? statusBarIconBrightness,
  Brightness? systemNavigationBarIconBrightness,
  bool? systemNavigationBarContrastEnforced,
  bool? systemStatusBarContrastEnforced,
  bool zoned = true,
  bool isTest = false,
  @Deprecated('已无作用') bool withFileLogger = true,
}) async {
  // 运行app
  Future<void> __runner() async {
    WidgetsFlutterBinding.ensureInitialized();

    // 初始化日志系统
    await L.init(withFileLogger: withFileLogger);

    if (statusBarColor != null) {
      SystemChrome.setSystemUIOverlayStyle(
        SystemUiOverlayStyle.dark.copyWith(
          statusBarColor: statusBarColor,
          statusBarBrightness: statusBarBrightness,
          statusBarIconBrightness: statusBarIconBrightness,
          systemNavigationBarColor: systemNavigationBarColor,
          systemNavigationBarIconBrightness: systemNavigationBarIconBrightness,
          systemNavigationBarDividerColor: systemNavigationBarDividerColor,
          systemNavigationBarContrastEnforced:
              systemNavigationBarContrastEnforced,
          systemStatusBarContrastEnforced: systemStatusBarContrastEnforced,
        ),
      );
    }

    if (beforeApp != null) {
      try {
        await initDecoratedBox();
        await beforeApp();
      } catch (e, s) {
        L.w('运行app前置工作出现异常, 请检查是否有bug!. $e\n $s');
      }
    }

    await appRunner();

    if (afterApp != null) {
      try {
        await afterApp();
      } catch (e, s) {
        L.w('运行app后置工作出现异常, 请检查是否有bug!. $e\n $s');
      }
    }
  }

  // 错误处理
  void __handleError(Object e, StackTrace s) {
    if (onError != null) {
      onError.call(e, s);
    } else {
      L.e('error: $e, stacktrace: $s');
    }
  }

  // 非测试状态下, 运行app; 测试状态下, 需要由集成测试的tester来bump widget
  if (!isTest) {
    if (zoned) {
      runZonedGuarded<void>(__runner, __handleError);
    } else {
      __runner();
    }
  }
}