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 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
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.
** 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 retryDuration(seconds: 2), // wait 2 sec before second retryDuration(seconds: 3), // wait 3 sec before third retry
],
));
/// Sending a failing request for 3 times with 1s, then 2s, then 3s intervalawait dio.get('https://mock.codes/500');
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.