У меня есть асинхронный метод с блоком try catch, и он вызывает другой метод asyn c, который выбрасывает. Моя проблема в том, что выброшенное исключение не перехватывается в блоке перехвата.
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
, то это работает. Это был бы верный обходной путь для меня. Но так как я использую правила кодирования Effective Dart, я получаю предупреждение, когда опускаю условие on.
https://dart-lang.github.io/linter/lints/avoid_catches_without_on_clauses.html
Как правильно отлавливать ЛЮБОЕ исключение в блоке catch с предложением on
?