我们可以使用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