///全局异常的捕捉
class FlutterCatchError {
run(Widget app) {
///Flutter 框架异常
FlutterError.onError = (FlutterErrorDetails details) async {
///TODO 线上环境
if (kReleaseMode) {
Zone.current.handleUncaughtError(details.exception, details.stack);
} else {
///TODO 开发期间 print
FlutterError.dumpErrorToConsole(details);
}
};
setCustomErrorPage();
runZonedGuarded(() {
///受保护的代码块
runApp(app);
}, (error, stack) => catchError(error, stack));
}
///对搜集的 异常进行处理 上报等等
catchError(Object error, StackTrace stack) {
print("AppCatchError>>>>>>>>>>: $kReleaseMode"); //是否是 Release版本
print('APP出现异常 message:$error,stackTrace:$stack');
}
///自定义异常页面
void setCustomErrorPage() {
ErrorWidget.builder = (FlutterErrorDetails flutterErrorDetails) {
debugPrint(flutterErrorDetails.toString());
String stError = "未知";
if(flutterErrorDetails.exception.toString().indexOf('data != null') != -1){
stError = "某字段为空";
}
return Material(
color: Colors.transparent,
child: SafeArea(
child: Container(
color: Colors.white,
padding: EdgeInsets.all(15),
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("当前模块异常${',系统诊断为:'+stError},请于管理员联系!"),
Text(
flutterErrorDetails.exceptionAsString(),
style: TextStyle(color: Colors.blue, fontSize: 14),
textAlign: TextAlign.start,
)
],
),
)
),
),
);
};
}
}
Flutter全局异常捕获及处理
最新推荐文章于 2023-12-29 17:15:59 发布