使用 runZoned和FlutterError.onError
Future<Null> main() async {
var isInDebugMode = false;
FlutterError.onError = (FlutterErrorDetails details) async {
if (isInDebugMode) {
FlutterError.dumpErrorToConsole(details);
} else {
Zone.current.handleUncaughtError(details.exception, details.stack);
}
};
runZoned<Future<Null>>(() async {
runApp(new HomeApp());
}, onError: (error, stackTrace) async {
await _reportError(error, stackTrace);
});
}
void _reportError(Object error, StackTrace stackTrace)async{
XJPathManager.saveErrorInfo('report error:\n'+error.toString()+'\n'+ 'stackTrace:\n'+stackTrace.toString());
}
// 储存错误信息
static void saveErrorInfo(String string) async{
try {
var path = await getErrorPathPath();
var dateStr = XJDateUtil.getDateStrByDateTime(DateTime.now(),format: DateFormat.YEAR_MONTH_DAY);
var file = File(path + dateStr + '.txt');
print('errorFile saveStr:\n'+string);
var timeStr = XJDateUtil.getNowDateStr();
string = timeStr+'\n'+string+'\n';
await file.writeAsString(string,mode:FileMode.writeOnlyAppend,flush: true);
}
catch (err) {
print('save error file err:');
print(err);
}
}