Flutter 为什么不调用自定义ErrorWidget.builder?
我在Flutter 为什么不调用自定义ErrorWidget.builder?,flutter,Flutter,我在main.dart void main() { ErrorWidget.builder = (FlutterErrorDetails details) { return Container( decoration: BoxDecoration(color: Colors.white), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisA
main.dart
void main() {
ErrorWidget.builder = (FlutterErrorDetails details) {
return Container(
decoration: BoxDecoration(color: Colors.white),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget> [
Padding(
padding: const EdgeInsets.only(bottom: 35),
child: Directionality(
textDirection: TextDirection.ltr,
child: Icon(FontAwesomeIcons.briefcaseMedical, size: 60, color: Colors.grey,)),
),
Padding(
padding: const EdgeInsets.only(left: 30, right: 30),
child: Directionality(
textDirection: TextDirection.ltr,
child: Text(
'Oops, something went wrong',
style: TextStyle(color: Colors.grey, fontWeight: FontWeight.bold, fontSize: 18), textAlign: TextAlign.center
),
),
),
Padding(
padding: const EdgeInsets.only(top: 5, left: 30, right: 30),
child: Directionality(
textDirection: TextDirection.ltr,
child: Text(
'There was an unexpected problem processing your operation',
style: TextStyle(color: Colors.grey, fontSize: 14), textAlign: TextAlign.center
),
),
),
]
),
);
};
方法onFatalError
返回ErrorWidget,实现如下
Widget onFatalError(
{@required BuildContext context, dynamic exception, StackTrace stack, String errorMessage}) {
....
return ErrorWidget(exception);
}
我遇到的问题是,如果
onFatalError
返回ErrorWidget
,则不会调用ErrorWidget.builder
。如果我没有捕获异常并保持其未处理状态,则调用ErrorWidget.builder
。这就是ErrorWidget
的工作原理吗?它是否只在未处理的异常上按预期工作?ErrorWidget是红屏错误Widget
根据文档,每当一个小部件启动时,颤振就会产生红屏错误
无法生成。如果您浏览一下StatefulWidget.dart类,您
将在performRebuild()方法中调用此代码:
在这里你可以看到这个红屏错误只是一个小部件
框架提供的命名ErrorWidget
看看这篇文章:
如果您想处理http错误之类的异常,您应该编写自定义类小部件,并在遇到异常时调用它
Widget onFatalError(
{@required BuildContext context, dynamic exception, StackTrace stack, String errorMessage}) {
....
return ErrorWidget(exception);
}
@override
void performRebuild() {
//..//
try {
built = build();
debugWidgetBuilderValue(widget, built);
} catch (e, stack) {
built = ErrorWidget.builder(_debugReportException('building $this', e, stack));
}
//..//
}