main.dart 1.15 KB
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()));
}