handle_error_utils.dart 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import 'dart:async';
  2. import 'package:flutter/foundation.dart';
  3. // 捕获全局异常,进行统一处理。
  4. void handleError(void Function() body) {
  5. // 重写Flutter异常回调 FlutterError.onError
  6. FlutterError.onError = (FlutterErrorDetails details) {
  7. if (!kReleaseMode) {
  8. // debug时,直接将异常信息打印。
  9. FlutterError.dumpErrorToConsole(details);
  10. } else {
  11. // release时,将异常交由zone统一处理。
  12. Zone.current.handleUncaughtError(details.exception, details.stack!);
  13. }
  14. };
  15. // 使用runZonedGuarded捕获Flutter未捕获的异常
  16. runZonedGuarded(body, (Object error, StackTrace stackTrace) async {
  17. await _reportError(error, stackTrace);
  18. });
  19. }
  20. Future<void> _reportError(Object error, StackTrace stackTrace) async {
  21. if (!kReleaseMode) {
  22. debugPrintStack(
  23. stackTrace: stackTrace,
  24. label: error.toString(),
  25. maxFrames: 100,
  26. );
  27. } else {
  28. // 将异常信息收集并上传到服务器。可以直接使用类似`flutter_bugly`插件处理异常上报。
  29. }
  30. }