12345678910111213141516171819202122232425262728293031323334353637 |
- import 'dart:async';
- import 'package:flutter/foundation.dart';
- // 捕获全局异常,进行统一处理。
- void handleError(void Function() body) {
- // 重写Flutter异常回调 FlutterError.onError
- FlutterError.onError = (FlutterErrorDetails details) {
- if (!kReleaseMode) {
- // debug时,直接将异常信息打印。
- FlutterError.dumpErrorToConsole(details);
- } else {
- // release时,将异常交由zone统一处理。
- Zone.current.handleUncaughtError(details.exception, details.stack!);
- }
- };
- // 使用runZonedGuarded捕获Flutter未捕获的异常
- runZonedGuarded(body, (Object error, StackTrace stackTrace) async {
- await _reportError(error, stackTrace);
- });
- }
- Future<void> _reportError(Object error, StackTrace stackTrace) async {
- if (!kReleaseMode) {
- debugPrintStack(
- stackTrace: stackTrace,
- label: error.toString(),
- maxFrames: 100,
- );
- } else {
- // 将异常信息收集并上传到服务器。可以直接使用类似`flutter_bugly`插件处理异常上报。
- }
- }
|