handle_error_utils.dart 1.1 KB

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