MUH*_*C P 9 android dart flutter bloc
// Copyright (c) 2021, Very Good Ventures
// https://verygood.ventures
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.
import 'dart:async';
import 'dart:developer';
import 'package:bloc/bloc.dart';
import 'package:flutter/widgets.dart';
class AppBlocObserver extends BlocObserver {
@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<void> bootstrap(FutureOr<Widget> Function() builder) async {
Bloc.observer = AppBlocObserver();
FlutterError.onError = (details) {
log(details.exceptionAsString(), stackTrace: details.stack);
};
await runZonedGuarded(
() async => runApp(await builder()),
(error, stackTrace) => log(error.toString(), stackTrace: stackTrace),
);
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这个代码片段,我只是对 runZonedGuarded() 和 bootstrap(FutureOr Function() builder) 感到困惑。该代码由very_good CLI生成,它将为flutter应用程序创建一个入门样板。
Future<void> bootstrap(FutureOr<Widget> Function() builder) async { ...
正在定义一个名为 的函数bootstrap。该函数采用一个名为 builder 的参数,它是
并且它将异步执行(构建器可能会也可能不会异步执行)。
这Bloc.observer = AppBlocObserver();是观察应用程序块正在执行的操作的一种已弃用的方法。定义AppBlocObserver了一系列回调,这些回调将在“事件”被触发时执行,例如error、 和change。
对于BLoC- 库的版本 >= 8.0 ,您可能应该执行如下操作,而不是问题中的运行区域保护后置,因为它们移动了 bloc 观察者属性。
runZonedGuarded(
() => BlocOverrides.runZoned(
() async => runApp(await builder()),
blocObserver: AppBlocObserver()
),
(error, stackTrace) => log(error.toString(), stackTrace: stackTrace));
Run Code Online (Sandbox Code Playgroud)
这个“构建器”方法可能是一个异步方法(或者不是),然后将被执行,返回的小部件将成为runApp的参数- 女巫将执行
膨胀给定的小部件并将其附加到屏幕。
然后该应用程序将在错误区域中运行,其中有趣的部分是
onError 函数既用于通过重写 zoneSpecification 中的 ZoneSpecification.handleUncaughtError(如果有)来处理异步错误,又用于处理调用 body 同步引发的错误。
| 归档时间: |
|
| 查看次数: |
8293 次 |
| 最近记录: |