shouldRetry method

bool shouldRetry({
  1. required ApiError error,
  2. required int attemptNumber,
  3. required HttpMethod method,
})

Evaluates whether an error condition qualifies for retry.

Implementation

bool shouldRetry({
  required ApiError error,
  required int attemptNumber,
  required HttpMethod method,
}) {
  if (attemptNumber >= retryCount) {
    return false;
  }

  if (!retryOnMethods.contains(method)) {
    return false;
  }

  // Always retry network timeouts and socket connectivity issues
  if (error.type == ApiErrorType.network || error.type == ApiErrorType.timeout) {
    return true;
  }

  // Retry transient 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout
  if (error.type == ApiErrorType.server) {
    final status = error.statusCode;
    if (status == 502 || status == 503 || status == 504) {
      return true;
    }
  }

  return false;
}