Flutter异常监控
异常的捕获
可以使用try-catch捕获同步异常,使用catchERROR捕获异步代码的异常。
未捕获异常
可以在main函数中重写FlutterError.onError函数设置默认的未捕获异常处理机制。
1
2
3
4
5
6
7
| void main(){
Flutter.Error.onError = (detail){
// 异常处理
};
runApp(MyApp());
}
|
捕获Future的异常
可以使用zone,zone表示一个代码执行的上下文,给异步代码提供了一个稳定的运行环境,可以理解为一个沙盒:
1
2
3
4
5
6
7
| void main(){
runZone((){
runApp(MyApp());
},onError(error,stackTrace){
// 异常处理
});
}
|
红白屏捕获
可以在main函数中重写ErrorWidgetBuilder:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| void performRebuild() {
...
try {
...
} catch (e, stack) {
// ErrorWidget.builder回调方法替换错误页面
built = ErrorWidget.builder(
_debugReportException(
ErrorDescription('building $this'),
e,
stack,
informationCollector: () sync* {
yield DiagnosticsDebugCreator(DebugCreator(this));
},
),
);
}
...
}
//默认的处理方式,我们也可以在main中覆盖处理
static ErrorWidgetBuilder builder = _defaultErrorWidgetBuilder;
|