Flutter 全局捕获异常并使用device_info库收集信息并处理

我们可以使用device_info库来获取相关android手机和苹果手机的设备信息,获取如下

#设备信息
  device_info: ^2.0.3

为了获取全局所有的bug,使用runZoned方法,但是此方法已经被替换成了runZonedGuarded方法,使用方法大同小异,我直接抽离出来了一个工具类,大家可以直接使用

区分了正式环境和测试环境下的不同的处理方式,使用device_info获取相关设备的信息

import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:device_info/device_info.dart';
import 'package:flutter/material.dart';
import 'package:my_fllutter_test/kailuzhebase/const/Config.dart';

///异常上报工具类
class ErrorReportUtils{
  run(Widget app){
    runZonedGuarded(() {
      //等待组件初始化完成
      WidgetsFlutterBinding.ensureInitialized();
      //自定义全局error
      FlutterError.onError = (FlutterErrorDetails details) {
        if (Config.isDebug) {
          //如果判断是测试环境的话就直接log日志输出
          FlutterError.dumpErrorToConsole(details);
        } else {
          //正式环境下统一进行处理
          Zone.current.handleUncaughtError(details.exception, details.stack!);
        }
      };
      runApp(app);
    }, (Object error, StackTrace stack) {
      //接收到所有的问题进行处理上报
      reportErrorInfo(error, stack);
    });
  }

  void reportErrorInfo(Object error, StackTrace stack) async{
    //error是错误描述
    print("错误信息1:"+error.toString());
    //stack是错误出现的地方
    print("错误信息2:"+stack.toString());

    //获取设备信息
    DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
    if(Platform.isAndroid){
      //android平台
      AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
      print("http_log:"+androidInfo.brand);
      print("http_log:"+androidInfo.product);
      print("http_log:"+androidInfo.version.release);
    }else if(Platform.isIOS){
      //ios平台
      IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
      //TODO
    }

    //TODO 添加版本信息,添加用户信息,上传信息到服务器或者其他操作

  }
}
使用也非常简单,
main() {
    ErrorReportUtils().run(MyApp());
}

就可以正常的捕获到所有的bug啦

操作的时候发现怎么都输出不了错误信息,后来debug了一下,然后就正常了,如果不能正常捕获到错误信息的话,可以试试debug

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值