- 基本思路:
- 在网络请求失败时,记录失败次数。
- 按照一定的策略(如固定间隔、指数退避等)等待一段时间后再次发起请求。
- 当达到最大重试次数仍失败时,结束重试并处理最终失败情况。
- 关键类和方法(使用Dio库):
- Dio类:用于发起网络请求。通过
Dio dio = Dio();
创建实例。
- Interceptor类:可以通过实现
Interceptor
类来自定义拦截器。在拦截器中捕获请求失败的情况,例如:
class RetryInterceptor extends Interceptor {
int maxRetryCount = 3;
@override
void onError(DioError err, ErrorInterceptorHandler handler) async {
if (err.response != null && err.response.statusCode! >= 500 && err.response.statusCode! < 600) {
int retryCount = 0;
while (retryCount < maxRetryCount) {
retryCount++;
try {
Response response = await dio.request(err.requestOptions.path,
options: err.requestOptions);
return handler.resolve(response);
} catch (e) {
await Future.delayed(Duration(seconds: 2));// 固定间隔2秒重试
}
}
}
return handler.next(err);
}
}
- 添加拦截器:在创建
Dio
实例后,添加自定义的重试拦截器,如dio.interceptors.add(RetryInterceptor());
。这样,当网络请求因服务器错误(5xx状态码为例)失败时,就会按照设定的重试机制进行重试。