Dio改造子库的Flutter缓存机制

标签 flutter dart dio

我的应用程序正在使用 DioRetrofit 子库,在其中我不确定如何为此定义缓存机制,

我在Retrofit示例代码中找到了这一行:

@GET("")
Future<String> testCustomOptions(@DioOptions() Options options);

现在我如何在此 http 请求上定义缓存?

Retrofit文档:

void main(List<String> args) {
  final dio = Dio();   // Provide a dio instance
  dio.options.headers["Demo-Header"] = "demo header";   // config your dio headers globally
  final client = RestClient(dio);
  
  client.getTasks().then((it) => logger.i(it));

dio-http-cache文档:

QuickStart

Add a dio-http-cache interceptor in Dio :

dio.interceptors.add(DioCacheManager(CacheConfig(baseUrl: "http://www.google.com")).interceptor);

Set maxAge for a request :

Dio().get(
  "http://www.google.com",
  options: buildCacheOptions(Duration(days: 7)),
);

我的完整实现代码:

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;
    return _MyApis(dio);
  }
}

最佳答案

在 API 添加点调用中添加参数

Future<HttpResponse<PageInformation>> login(@DioOptions() Options options);

在Dio中添加拦截器

dio.interceptors.add(DioCacheManager(CacheConfig(baseUrl: 'YOUR BASE URL')).interceptor);

为 Endpoint 参数创建一个对象

Options options = buildCacheOptions(Duration(days: 10),forceRefresh: true);

调用您的 API 端点

myapi.login(options)
 

关于Dio改造子库的Flutter缓存机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63810060/

相关文章:

Flutter - 屏幕的多个文件?

dart - Flutter 中的一次性警报对话

Flutter 将阴影应用于 CustomPainted 小部件

html - 在桌面图形化独立应用程序中嵌入 Dart VM

flutter - 如何在 flutter 中使用 retrofit 在 dio api 调用中设置 responseType?

flutter - 客户端握手错误 : CERTIFICATE_VERIFY_FAILED Self signed certificate in flutter

api - Flutter 队列 API 请求稍后执行

encryption - 如何在flutter中加密用户名和密码

android - Flutter(或Dart)的QR扫描插件

flutter - 创建视频列表的最佳方法是什么?