flutter - `on`子句未捕获引发的异常(类型似乎错误)

标签 flutter dart async-await try-catch

我有一个带有try catch块的异步方法,它调用了另一个引发的异步方法。我的问题是抛出的异常未在catch块中捕获。

Future savePlayer(Player player) async {
  try {
    var store = await SharedPreferences.getInstance();
    await store.setString(_playerId, jsonEncode(player.toJson()));   // exception in player.toJson() "NoSuchMethod"
  } on Exception catch (err) {
    throw LocalStorageException(                                     // no catch here
        message: TextConstants.exception.localStorageSaveException,
        hint: TextConstants.exception.localStorageSaveExceptionHint,
        originalExceptionText: err.toString());
  } catch (err) {
    throw LocalStorageException(                                     // catch here, but why?
        message: TextConstants.exception.localStorageSaveException,
        hint: TextConstants.exception.localStorageSaveExceptionHint,
        originalExceptionText: err.toString());
  }
}

如果我删除on Exception并仅使用catch,那么它将起作用。这对我来说是一个有效的解决方法。但是由于我使用的是有效Dart编码规则,因此在省略on子句时会收到警告。

https://dart-lang.github.io/linter/lints/avoid_catches_without_on_clauses.html

在带有on子句的catch块中捕获ANY异常的正确方法是什么?

最佳答案

on Exception捕获Exception类型的对象。

被抛出的是一个 NoSuchMethodError ,这是一个 Error Error不是Exception(反之亦然)。

Dart区分运行时错误和逻辑错误(程序员错误)。运行时错误应源自Exception;逻辑错误应源自Error

Effective Dart discourages catching Error 。它们通常表示可能会并且应该避免的编程错误(例如,调用不存在的函数)。

关于flutter - `on`子句未捕获引发的异常(类型似乎错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61033298/

相关文章:

android-studio - 在 Android Studio Flutter 项目的上下文菜单中用未显示的列换行

flutter - 升级flutter SDK后我遇到了以下问题

android - Flutter - 如何在android中自动启用位置服务?

flutter - Flutter:Dart解压缩并保存来自http的响应

async-await - 如何在不影响上层的情况下使我的存储库异步

c# - 此 OperationContextScope 被乱序处理

dart - Flutter ScreenState Dispose方法异常

flutter - Dart数据类型命名约定。为什么用String而不是string

flutter - 有没有办法为输入装饰前缀图标设置主题?

node.js - JS Promise在nodejs版本之间的执行顺序不一致