You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Dio Retrofit子库的缓存机制配置方法咨询

如何为Dio Retrofit子库的请求配置缓存

我来帮你搞定这个缓存配置的问题,结合你给出的代码和dio-http-cache的用法,咱们一步步来:

第一步:给Dio实例添加缓存拦截器

首先要确保你已经添加了dio-http-cache依赖,然后在创建Dio实例的地方(也就是你MyApis的create方法里),把缓存拦截器加进去。这样全局的缓存机制就生效了,后续每个请求都可以基于这个拦截器配置单独的缓存规则。

修改你的MyApis.create()方法:

static MyApis create() {
  final dio = Dio();
  dio.options.headers['Content-Type'] = 'application/json';
  dio.options.receiveTimeout = 60000;
  dio.options.connectTimeout = 120000;
  
  // 添加dio-http-cache拦截器,替换成你的实际API基础地址
  dio.interceptors.add(DioCacheManager(CacheConfig(baseUrl: "https://your-api-domain.com")).interceptor);
  
  return _MyApis(dio);
}

第二步:在Retrofit请求中传递缓存配置

你的login方法已经用了@DioOptions() Options options参数,这正好用来传递缓存配置。调用这个接口的时候,用buildCacheOptions方法构建带有缓存规则的Options对象就行。

比如你调用login接口的时候:

// 获取MyApis实例
final api = MyApis.create();
// 构建缓存配置:比如缓存7天
final cacheOptions = buildCacheOptions(const Duration(days: 7));
// 发起请求并传入缓存配置
api.login(cacheOptions).then((response) {
  // 处理返回结果
});

进阶:自定义缓存策略

如果你需要更精细的缓存控制,比如设置缓存过期后仍可使用的stale时间,或者指定缓存模式(比如强制从缓存读、只请求网络不缓存等),可以在buildCacheOptions里添加更多参数:

final cacheOptions = buildCacheOptions(
  const Duration(days: 7),
  maxStale: const Duration(days: 14), // 缓存过期后还能再用14天
  policy: CachePolicy.forceCache, // 强制使用缓存,不发起网络请求
);

完整修改后的MyApis代码

给你整合好的完整代码,方便你直接参考:

Provider(
  create: (_) => MyApis.create(),
),
abstract class MyApis{
  factory MyApis(Dio dio, {String baseUrl}) = _MyApis;
  
  @GET("/login")
  Future<HttpResponse<PageInformation>> login(@DioOptions() Options options);
  
  static MyApis create() {
    final dio = Dio();
    dio.options.headers['Content-Type'] = 'application/json';
    dio.options.receiveTimeout = 60000;
    dio.options.connectTimeout = 120000;
    
    // 添加缓存拦截器
    dio.interceptors.add(DioCacheManager(CacheConfig(baseUrl: "https://your-api-domain.com")).interceptor);
    
    return _MyApis(dio);
  }
}

核心逻辑就是:先通过拦截器给Dio装上缓存能力,再通过@DioOptions参数给单个请求传递具体的缓存规则,这样就能完美结合Retrofit风格的接口定义和dio-http-cache的缓存功能啦。

内容的提问来源于stack exchange,提问作者DolDurma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:32:37