Flutter异常处理

240 阅读1分钟

flutter中的异常:

  • Dart代码运行时发生的异常
  • Flutter框架的异常
  • 原生代码运行时跑出的异常

说明

Dart是单线程的编程语言,采用事件循环机制来运行任务,所以各个任务的运行时互相独立的,也就是说即使在程序运行时出现异常,即使没有进行try-catch来捕获异常,程序也不会退出,只会导致当前任务后续的代码不会被执行,而其他功能可以继续使用

单个异常捕获

  1. 同步异常的捕获:
    • try-catch
  2. 异步异常的捕获:
    • 使用Future提供的catchError进行捕获
    • 将异步转为同步然后通过try-catch进行捕获

集中捕获异常

class LinDefend{
  run(Widget app){
    //框架异常
    FlutterError.onError = (FlutterErrorDetails details)async{
      //线上环境,走线上逻辑
      if(kReleaseMode)
      {
        Zone.current.handleUncaughtError(details.exception, details.stack??StackTrace.fromString('stackTraceString'));
      }
      else
      {
        //开发期间,走Console输出
        FlutterError.dumpErrorToConsole(details);
      }
    };

    runZonedGuarded<Future<void>>(()async{
      run(app);
    }, (e,s)=> _reportError(e,s));
  }

  _reportError(Object error,StackTrace stackTrace){
    print('catch error$error');
  }
}