本站即将关闭,请关注微信公众号
PDF 不迷路

当前位置:首页 >> 计算机 >> flutter 全局异常捕获

flutter 全局异常捕获

flutter 全局异常捕获

来源:网络 更新时间:不详

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));
    },
  );
}

关键点说明:

runZonedGuarded函数给执行对象制定了一个zone,zone 可理解是一个代码执行沙箱,它能捕获所有未处理的异常(包括同步与异步异常)。
FlutterError.onError是一个静态函数,可捕获Widget在build阶段发生的错误异常,我们对其进行重写,把异常信息进行上报处理。

最新更新

更多>>  

声明:本网站所资源均通过互联网收录,并提供大家免费下载阅读,如果本站有侵犯权利人版权内容的请向本站投诉。

投诉邮箱:577982958@qq.com 一经核实,本站将立即删除相关收录作品。

© 2020 - 2021   qianherenli.com 版权所有

豫ICP备2020030583号-1


本站即将关闭,请关注微信公众号,PDF 不迷路