美文网首页
Flutter 异常上报

Flutter 异常上报

作者: 旺仔_100 | 来源:发表于2021-06-12 15:08 被阅读0次

    一、try cacth 可以捕获同步异常,使用catchError捕获异步异常

    
    //使用try-catch捕获同步异常
    try {
      throw StateError('This is a Dart exception.');
    }
    catch(e) {
      print(e);
    }
    
    //使用catchError捕获异步异常
    Future.delayed(Duration(seconds: 1))
        .then((e) => throw StateError('This is a Dart exception in Future.'))
        .catchError((e)=>print(e));
        
    //注意,以下代码无法捕获异步异常
    try {
      Future.delayed(Duration(seconds: 1))
          .then((e) => throw StateError('This is a Dart exception in Future.'))
    }
    catch(e) {
      print("This line will never be executed. ");
    }
    

    二、不论是同步异常还是异步异常我们都可以使用Zone捕获到

    
    runZoned(() {
      //同步抛出异常
      throw StateError('This is a Dart exception.');
    }, onError: (dynamic e, StackTrace stack) {
      print('Sync error caught by zone');
    });
    
    runZoned(() {
      //异步抛出异常
      Future.delayed(Duration(seconds: 1))
          .then((e) => throw StateError('This is a Dart exception in Future.'));
    }, onError: (dynamic e, StackTrace stack) {
      print('Async error aught by zone');
    });
    

    三、framework层的异常,系统会提供给FlutterError类,所以我们可以把这个错误统一交个zone去处理

    
    FlutterError.onError = (FlutterErrorDetails details) async {
      //转发至Zone中
      Zone.current.handleUncaughtError(details.exception, details.stack);
    };
    
    runZoned<Future<Null>>(() async {
      runApp(MyApp());
    }, onError: (error, stackTrace) async {
     //Do sth for error
    });
    

    可以自己通过文件去上报,也可以使用bugly去上报

    相关文章

      网友评论

          本文标题:Flutter 异常上报

          本文链接:https://www.haomeiwen.com/subject/eavndltx.html