Метод catchError
Обрабатывает ошибки, выпущенные этим Future.
Это асинхронный эквивалент блока "catch".
Возвращает новый Future, который будет завершен либо результатом этого будущего, либо результатом вызова onError обратного вызова.
Если это будущее завершается значением, возвращаемое будущее завершается тем же значением.
Если это будущее завершается ошибкой, то test сначала вызывается с значением ошибки.
Если test возвращает false, исключение не обрабатывается этим catchError, и возвращаемое будущее завершается той же ошибкой и трассировкой стека, что и это будущее.
Если test возвращает true, onError вызывается с ошибкой и, возможно, трассировкой стека, и возвращаемое будущее завершается результатом этого вызова точно так же, как для then's onError.
Если test опущено, оно по умолчанию является функцией, которая всегда возвращает true. Функция test не должна выбрасывать исключение, но если она это сделает, она обрабатывается так, как если бы функция onError была выбрашена.
Обратите внимание, что будущие действия не откладывают сообщение об ошибках до добавления слушателей. Если первый catchError (или then) вызов происходит после того, как это будущее было завершено с ошибкой, то ошибка сообщается как необработанная ошибка. Смотрите описание в 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.18.5/dart-async/Future/catchError.html