패키지, 저장소 및 앱 카테고리 검색

패키지 상세v7.0.1

dio_smart_retry

Dio와 Dio 패키지용 리트라이 라이브러리, 사랑을 담아 제작되었습니다. 기본적으로는 적절한 재시도 가능한 HTTP 상태 코드에 대해서만 요청이 재시도됩니다.

AndroidiOSWebmacOSWindowsLinux
30일 다운로드
20.9만
좋아요
314
Pub 점수
145

패키지 설치

flutter pub add dio_smart_retry

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

Dio Smart Retry는 Dio HTTP 클라이언트를 위한 재시도 유틸리티로, 미리 정의된 조건에 따라 요청을 자동으로 재시도하도록 설계되었습니다. 기본적으로 5xx 서버 오류 또는 네트워크 타임아웃과 같은 재시도 가능한 HTTP 상태 코드에 대해만 재시도합니다. 간단함과 신뢰성을 중시하여 기존 Dio 설정과 원활하게 통합됩니다. 이 패키지는 Android, iOS, Web, macOS, Windows, Linux 등 모든 주요 플랫폼을 지원하며, 크로스플랫폼 Flutter 앱에서 견고한 네트워크 작업에 이상적입니다.

사용 사례

  • 일시적인 네트워크 장애 처리
  • 서버 오류에 대한 재시도 자동화
  • 나쁜 연결 상태에서 앱의 회복력 향상
  • API 호출에서 오류 처리 간소화
  • 비즈니스 코드 내 수동 재시도 로직 감소

주요 기능

  • 재시도 가능한 HTTP 상태에 대한 자동 재시도
  • Dio와의 간편한 통합
  • 다수의 플랫폼을 지원합니다
  • 사용자 정의 재시도 동작
  • 경량이며 오버헤드가 최소

적합한 대상

  • 자주 API 호출이 있는 Flutter 앱
  • 신뢰할 수 있는 네트워크 통신이 필요한 앱
  • 간단한 재시도 로직을 찾는 개발자
  • HTTP 요청에 Dio를 사용하는 프로젝트
  • 반복적인 오류 처리를 줄이려는 팀

고려 사항

  • 클라이언트 오류(4xx)에 대해 기본적으로 재시도하지 않습니다
  • 사용자 지정 재시도 로직은 추가 구성이 필요합니다
  • Dio 기반 HTTP 클라이언트에 한정
  • 고지연 환경에 맞게 조정이 필요할 수 있습니다
  • 기본 재시도를 초과한 내장된 백오프 전략 없음

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

Pub Version Dart SDK Version style: very good analysis License

Dio Smart Retry

Flexible retry library for Dio package. This is a next generation of an abandoned dio_retry package.
By default, the request will be retried only for appropriate retryable http statuses.
Also, it supports dynamic delay between retries.
Null Safety.

Contents

Getting Started for Dio

  1. Add package to pubspec.yaml: dio_smart_retry: ^7.0.0 **
  2. Import package: import 'package:dio_smart_retry/dio_smart_retry.dart'

** For the old dio (ver. 4.+) use dio_smart_retry: ^1.4.0

Usage

Just add an interceptor to your dio:

final dio = Dio();
// Add the interceptor
dio.interceptors.add(RetryInterceptor(
  dio: dio,
  logPrint: print, // specify log function (optional)
  retries: 3, // retry count (optional)
  retryDelays: const [ // set delays between retries (optional)
    Duration(seconds: 1), // wait 1 sec before first retry
    Duration(seconds: 2), // wait 2 sec before second retry
    Duration(seconds: 3), // wait 3 sec before third retry
  ],
));

/// Sending a failing request for 3 times with 1s, then 2s, then 3s interval
await dio.get('https://mock.codes/500');

See example/dio_smart_retry_example.dart.

Default retryable status codes list

Responses with these http status codes will be retried by default:

  • 408: RequestTimeout
  • 429: TooManyRequests
  • 500: InternalServerError
  • 502: BadGateway
  • 503: ServiceUnavailable
  • 504: GatewayTimeout
  • 440: LoginTimeout (IIS)
  • 460: ClientClosedRequest (AWS Elastic Load Balancer)
  • 499: ClientClosedRequest (ngnix)
  • 520: WebServerReturnedUnknownError
  • 521: WebServerIsDown
  • 522: ConnectionTimedOut
  • 523: OriginIsUnreachable
  • 524: TimeoutOccurred
  • 525: SSLHandshakeFailed
  • 527: RailgunError
  • 598: NetworkReadTimeoutError
  • 599: NetworkConnectTimeoutError It's possible to override this list

Disable retry

It's possible to manually disable retry for a specified request. Use disableRetry extension for that:

final request = RequestOptions(path: '/')
  ..disableRetry = true;
await dio.fetch<String>(request);

or

final options = Options()
  ..disableRetry = true;
await dio.get<String>('/', options: options);

Add extra retryable status codes

It's possible to add you own retryable status codes. Use retryableExtraStatuses parameter for that. Here is an example:

RetryInterceptor(
  dio: dio,
  retryableExtraStatuses: { status401Unauthorized },
)

or:

RetryInterceptor(
  dio: dio,
  retryableExtraStatuses: { 401 },
)

Override retryable statuses

It's possible to override default retryable status codes list. Just make new instance of DefaultRetryEvaluator and pass your status codes there.
Here is an example:

final myStatuses = { status400BadRequest, status409Conflict };
dio.interceptors.add(
  RetryInterceptor(
    dio: dio,
    logPrint: print,
    retryEvaluator: DefaultRetryEvaluator(myStatuses).evaluate,
  ),
);

await dio.get<dynamic>('https://mock.codes/400');

Migrating to 7.0

Use MultipartFile instead of MultipartFileRecreatable.

카테고리

의존성

의존성 목록 3 개

소스 저장소

이 패키지를 사용하는 프로젝트