onError method

  1. @override
void onError(
  1. DioException err,
  2. ErrorInterceptorHandler handler
)

Called when an exception was occurred during the request.

Implementation

@override
void onError(DioException err, ErrorInterceptorHandler handler) async {
  int retryCount = err.requestOptions.extra['retryCount'] ?? 0;

  if (retryCount < maxRetries) {
    err.requestOptions.extra['retryCount'] = retryCount + 1;

    await Future.delayed(retryDelay);

    try {
      final response = await Dio().request(
        err.requestOptions.path,
        options: Options(
          method: err.requestOptions.method,
          headers: err.requestOptions.headers,
        ),
        data: err.requestOptions.data,
        queryParameters: err.requestOptions.queryParameters,
      );
      handler.resolve(response);
      return;
    } catch (e) {
      // Continue to handler.next
    }
  }

  handler.next(err);
}