MST

星途 面试题库

面试题:Flutter 中网络请求重试机制的基本实现思路

请简述在Flutter中实现网络请求重试机制的基本思路,包括可能用到的关键类和方法,假设使用Dio库进行网络请求。
47.5万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试
  1. 基本思路
    • 在网络请求失败时,记录失败次数。
    • 按照一定的策略(如固定间隔、指数退避等)等待一段时间后再次发起请求。
    • 当达到最大重试次数仍失败时,结束重试并处理最终失败情况。
  2. 关键类和方法(使用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状态码为例)失败时,就会按照设定的重试机制进行重试。