1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import 'package:flutter/material.dart';
import 'package:umeng_crash/umeng_crash.dart';
import 'dart:async';
import 'app.dart';
import 'global_settings.dart';
const bool inProduction = const bool.fromEnvironment("dart.vm.product");
void handleError(void body) {
/// 重写Flutter异常回调 FlutterError.onError
FlutterError.onError = (FlutterErrorDetails details) async {
if (inProduction) {
// release时,将异常交由zone统一处理。
Zone.current.handleUncaughtError(details.exception, details.stack);
} else {
// debug时,直接将异常信息打印。
FlutterError.dumpErrorToConsole(details);
}
UmengCrash.generateCustomLog(e:'${details.exception}', type: '${details.stack}');
};
/// 使用runZonedGuarded捕获Flutter未捕获的异常
runZonedGuarded(() => runApp(MyApp()), (error, stackTrace) {
if (inProduction) {
print("-----生产模式搜集日志");
} else {
print("-----debug模式搜集日志");
}
print(error);
print(stackTrace);
});
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await GlobalSettings.init();
handleError(runApp(MyApp()));
}