runDecoratedApp function
Future<void>
runDecoratedApp({
- required FutureOr<
void> appRunner(), - FutureOr<
void> beforeApp()?, - FutureOr<
void> afterApp()?, - FutureOr<
void> onError()?, - Color? statusBarColor,
- Brightness? statusBarBrightness,
- Brightness? statusBarIconBrightness,
- bool? systemStatusBarContrastEnforced,
- bool zoned = true,
- bool isTest = false,
- @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();
}
}
}