абстрактный метод catchError
Обрабатывает ошибки, возникшие в этом Future.
Это асинхронный эквивалент блока «catch».
Возвращает новый Future, который будет завершён результатом этого future или результатом вызова функции обратного вызова onError.
Если этот future завершается значением, возвращённый future завершается тем же значением.
Если этот future завершается ошибкой, сначала вызывается test со значением ошибки.
Если test возвращает false, это исключение не обрабатывается данным catchError, а возвращённый future завершается с той же ошибкой и трассировкой стека, что и этот future.
Если test возвращает true, onError вызывается с ошибкой и, возможно, трассировкой стека, а возвращённый future завершается результатом этого вызова точно так же, как в случае с onError метода then.
Если test не указан, по умолчанию используется функция, которая всегда возвращает true. Функция test не должна выбрасывать исключения, но если это происходит, обработка выполняется так, как если бы исключение выбросила функция onError.
Обратите внимание, что future не откладывают сообщение об ошибках до добавления обработчиков. Если первый вызов catchError (или then) происходит после того, как этот future завершился ошибкой, ошибка сообщается как необработанная. См. описание Future.
Пример:
Future.delayed(
const Duration(seconds: 1),
() => throw 401,
).then((value) {
throw 'Unreachable';
}).catchError((err) {
print('Error: $err'); // Prints 401.
}, test: (error) {
return error is int && error >= 400;
}); Реализация
// The `Function` below stands for one of two types:
// - (dynamic) -> FutureOr<T>
// - (dynamic, StackTrace) -> FutureOr<T>
// Given that there is a `test` function that is usually used to do an
// `is` check, we should also expect functions that take a specific argument.
Future<T> catchError(Function onError, {bool test(Object error)?});
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-async/Future/catchError.html