Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 为什么不调用自定义ErrorWidget.builder?_Flutter - Fatal编程技术网

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));
  }
 //..//
}