Flutter 框架可以捕獲運(yùn)行期間的錯(cuò)誤,包括構(gòu)建期間架谎、布局期間和繪制期間。
- 所有 Flutter 的錯(cuò)誤均會(huì)被回調(diào)方法
FlutterError.onError
捕獲辟躏。 - dart層的異彻瓤郏可以使用
runZonedGuarded
。 - 原生的崩潰分析可以使用
flutter_bugly
插件捎琐。 - 特定代碼異常捕獲使用
try{...}catch(e){...}
當(dāng)構(gòu)建期間發(fā)生錯(cuò)誤時(shí)会涎,回調(diào)函數(shù) ErrorWidget.builder
會(huì)被調(diào)用,來生成一個(gè)新的 widget瑞凑,用來代替構(gòu)建失敗的 widget末秃。
- debug 模式下會(huì)顯示一個(gè)紅色背景的錯(cuò)誤頁(yè)面
- release 模式下會(huì)展示一個(gè)灰色背景的空白頁(yè)面
import 'dart:async';
void main() {
// 捕獲 Flutter 框架中的異常
FlutterError.onError = (FlutterErrorDetails details) {
FlutterError.dumpErrorToConsole(details);
// 在此處添加自定義日志記錄邏輯,例如發(fā)送到遠(yuǎn)程日志服務(wù)器
print('Caught by FlutterError.onError: ${details.exception}');
};
// 捕獲 Dart 異常
runZonedGuarded<Future<void>>(() async {
runApp(MyApp());
}, (Object error, StackTrace stack) {
// 在此處添加自定義日志記錄邏輯籽御,例如發(fā)送到遠(yuǎn)程日志服務(wù)器
print('Caught by runZonedGuarded: $error');
print('Stack trace: $stack');
});
}