Flutter全局异常捕获及处理

///全局异常的捕捉
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,
                    )
                  ],
                ),
              )
          ),
        ),
      );
    };
  }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值