onError method
Called when an exception was occurred during the request.
Implementation
@override
Future<void> onError(DioException err, ErrorInterceptorHandler handler) async {
final options = err.requestOptions;
final attempt = ((options.extra[_attemptKey] as int?) ?? 0) + 1;
final statusCode = err.response?.statusCode;
final isNetworkError = err.response == null;
if (!_policy.shouldRetry(attempt: attempt, statusCode: statusCode, isNetworkError: isNetworkError)) {
return handler.next(err);
}
final retryAfter = RetryPolicy.parseRetryAfter(err.response?.headers.value('retry-after'));
await Future<void>.delayed(_policy.delay(attempt, retryAfter: retryAfter));
options.extra[_attemptKey] = attempt;
try {
final response = await _dio.fetch<dynamic>(options);
return handler.resolve(response);
} on DioException catch (e) {
return handler.next(e);
}
}