flutter 全局异常捕获

2021-07-05  本文已影响0人  李小轰

dart开发中,try-catch使用方式:

//捕获同步异常
try {
      ...
    } catch (e) {
      print("try-catch error : $e");
    }

//捕获异步异常
Future.error("error").catchError((e) {
      print("try-catch error : $e");
    });

我们使用如上方式,在关键代码处对Flutter进行异常捕获。不过,还有部分异常是在我们没有考虑到的场景下发生的,这些我们没有做埋点处理的异常如何捕获呢?

直接给出异常捕获模板:
void main() {
  void reportErrorAndLog(FlutterErrorDetails details) {
    final errorMsg = {
      "exception": details.exceptionAsString(),
      "stackTrace": details.stack.toString(),
    };
    print("reportErrorAndLog : $errorMsg");
    ...//上报错误
  }

  FlutterErrorDetails makeDetails(Object error, StackTrace stackTrace) {
    // 构建错误信息
    return FlutterErrorDetails(stack: stackTrace, exception: error);
  }

  FlutterError.onError = (FlutterErrorDetails details) {
    //获取 widget build 过程中出现的异常错误
    reportErrorAndLog(details);
  };
  runZonedGuarded(
    () {
      runApp(MyApp());
    },
    (error, stackTrace) {
      //没被我们catch的异常
      reportErrorAndLog(makeDetails(error, stackTrace));
    },
  );
}
关键点说明:
上一篇下一篇

猜你喜欢

热点阅读