Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
Error handling 禁用颤振';s";“死亡的红屏”;_Error Handling_Dart_Flutter - Fatal编程技术网

Error handling 禁用颤振';s";“死亡的红屏”;

Error handling 禁用颤振';s";“死亡的红屏”;,error-handling,dart,flutter,Error Handling,Dart,Flutter,有没有办法禁用颤振的“死亡红屏”? 我不介意它在调试期间出现,但它似乎也出现在生产版本中——我找不到任何关于如何禁用它的信息,也找不到自己捕获错误的信息 我尝试用flutterror.onError和runZoned(onError)捕捉杂散错误,但两者都没有阻止红色屏幕的出现 作为参考,我谈论的是这个屏幕: 您可以覆盖ErrorWidget.builder方法。 我已经决定了 ・示例代码 void main() { ErrorWidget.builder = (FlutterError

有没有办法禁用颤振的“死亡红屏”? 我不介意它在调试期间出现,但它似乎也出现在生产版本中——我找不到任何关于如何禁用它的信息,也找不到自己捕获错误的信息

我尝试用
flutterror.onError
runZoned(onError)
捕捉杂散错误,但两者都没有阻止红色屏幕的出现

作为参考,我谈论的是这个屏幕:


您可以覆盖ErrorWidget.builder方法。
我已经决定了

・示例代码

void main() {
    ErrorWidget.builder = (FlutterErrorDetails details) => Container();
    ...
}
・默认代码

static ErrorWidgetBuilder builder = _defaultErrorWidgetBuilder;
我希望是你的帮助


2019年12月21日更新

或者更改ErrorWidget背景颜色和文本样式

・示例代码

import 'dart:ui' as ui;
void main() {
    RenderErrorBox.backgroundColor = Colors.transparent;
    RenderErrorBox.textStyle = ui.TextStyle(color: Colors.transparent);
}

您可以尝试使用Catcher,它是一个免费的颤振插件,用于捕获和处理颤振应用程序中的错误。Catcher提供多种报告模式和处理程序,以配合颤振应用程序

只需在pubspec.yaml中添加catcher

catcher:^0.1.2

有关catcher的更多信息

一个很好的catcher入门教程

void main(){
bool-isDev=真;
ErrorWidget.builder=(错误详细信息错误详细信息){
返回AppErrorWidget(
errorDetails:errorDetails,
isDev:isDev,
);
};
}          
类AppErrorWidget扩展了无状态小部件{
最终错误详细信息错误详细信息;
最后的布尔isDev;
康斯特阿佩罗维杰酒店({
关键点,
@要求提供此错误详细信息,
this.isDev=false,
}):super(key:key);
@凌驾
小部件构建(构建上下文){
退货(
儿童:安全区(
子:容器(
装饰:框装饰(边框:border.all(颜色:Colors.red)),
子:ListView(
儿童:[
容器(
身高:20,
),
文本(isDev?errorDetails.toString():“”)
],
),
),
),
);
}
}

你必须确保你的应用程序运行时没有错误,例如,从
构建
函数中永远不要返回空值。@b好吧,这就是目标,是的-但是某些错误是我无法控制的(比如,滚动侦听器在某些情况下失败),如果忽略了某些事情,我仍然希望自己能够处理。死亡的红色屏幕是毫无意义的,因为它只会让用户感到困惑,而不允许我做一些类似警报的事情,并显示一条清晰的消息,如“发生了意外错误”。您可以编辑颤振源代码以显示其他内容(例如,空白白屏)。代码在您的颤振安装目录中。这不是和默认情况下一样吗?禁用将通过返回
Container()
而不是
ErrorWidget(details.exception)来实现我相信这就是我需要的,但是在哪里可以找到ErrorWidgetBuilder.builder?ErrorWidgetBuilder.builder是静态的。请查看此来源。很抱歉我的样品不好。请运行void main()。请,因为这确实有助于提高你的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。您可以使用该按钮改进此答案,以获得更多选票和声誉!
void main() {
 bool isDev = true;
          ErrorWidget.builder = (FlutterErrorDetails errorDetails) {
            return AppErrorWidget(
              errorDetails: errorDetails,
              isDev: isDev,
            );
          };
}          

    class AppErrorWidget extends StatelessWidget {
      final FlutterErrorDetails errorDetails;
      final bool isDev;
      const AppErrorWidget({
        Key key,
        @required this.errorDetails,
        this.isDev = false,
      }) : super(key: key);
      @override
      Widget build(BuildContext context) {
        return Material(
          child: SafeArea(
            child: Container(
              decoration: BoxDecoration(border: Border.all(color: Colors.red)),
              child: ListView(
                children: <Widget>[
                  Container(
                    height: 20,
                  ),
                  Text(isDev ? errorDetails.toString() : '')
                ],
              ),
            ),
          ),
        );
      }
    }