flutter中的异常:
- Dart代码运行时发生的异常
- Flutter框架的异常
- 原生代码运行时跑出的异常
说明
Dart是单线程的编程语言,采用事件循环机制来运行任务,所以各个任务的运行时互相独立的,也就是说即使在程序运行时出现异常,即使没有进行try-catch来捕获异常,程序也不会退出,只会导致当前任务后续的代码不会被执行,而其他功能可以继续使用
单个异常捕获
- 同步异常的捕获:
- try-catch
- 异步异常的捕获:
- 使用Future提供的catchError进行捕获
- 将异步转为同步然后通过try-catch进行捕获
集中捕获异常
class LinDefend{
run(Widget app){
//框架异常
FlutterError.onError = (FlutterErrorDetails details)async{
//线上环境,走线上逻辑
if(kReleaseMode)
{
Zone.current.handleUncaughtError(details.exception, details.stack??StackTrace.fromString('stackTraceString'));
}
else
{
//开发期间,走Console输出
FlutterError.dumpErrorToConsole(details);
}
};
runZonedGuarded<Future<void>>(()async{
run(app);
}, (e,s)=> _reportError(e,s));
}
_reportError(Object error,StackTrace stackTrace){
print('catch error$error');
}
}