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() : '')
],
),
),
),
);
}
}