- Dio-http-cache 是 Flutter 的 http 缓存库,为 Dio 设计,就像 Android 中的 RxCache 一样。
- Dio-http-cache 使用 sqflite 作为磁盘缓存,使用 Google/quiver-dart 的LRU算法 作为内存缓存策略。
- 有参考 flutter_cache_manager 开发,为此感谢。
- 更详细且最新的文档还请参阅 README。
dependencies:
dio_http_cache: ^0.3.x #latest version
-
为 dio 添加拦截器:
dio.interceptors.add(DioCacheManager(CacheConfig(baseUrl: "http://www.google.com")).interceptor);
-
为需要缓存的请求添加 options:
Dio().get( "http://www.google.com", options: buildCacheOptions(Duration(days: 7)), );
-
buildCacheOptions可以配置多种参数满足不同的缓存需求:
-
MaxAge: 只有这个是必须的参数,设置缓存的时间;
-
MaxStale: 设置过期时常;在maxAge过期,而请求网络失败的时候,如果maxStale没有过期,则会使用这个缓存数据。
buildCacheOptions(Duration(days: 7), maxStale: Duration(days: 10))
-
subKey: dio-http-cache 默认使用 url 作为缓存 key ,但当 url 不够用的时候,比如 post 请求分页数据的时候,就需要配合subKey使用。
buildCacheOptions(Duration(days: 7), subKey: "page=1")
-
-
CacheConfig 可以配置一些默认参数:
- encrypt / dectrypt: 这2个必须组合使用,实现磁盘缓存数据的加密。也可以在这里实现数据的压缩。
- DefaultMaxAge: 默认值为 Duration( day: 7 ), 在上面 buildCacheOption 中如果没有配置 MaxAge 有错误,或者自己实现了 option 而没有配置 MaxAge, 会使用这个默认值;
- DefalutMaxStale: 和 DefaultMaxAge 类似;
- DatabaseName: 配置数据库名;
- SkipMemoryCache: 默认 false;
- SkipDiskCache: 默认 false;
- MaxMemoryCacheCount: 最大的内存缓存数量,默认100;
-
如何清理已过期缓存
- 会自动清理不用管
- 如果非要清理,可以调用:
DioCacheManager.clearExpired();
-
如何删除一条记录
_dioCacheManager.delete(url);//会删除所有 url 的缓存。 _dioCacheManager.delete(url,subKey);
-
如何清理所有缓存(不管有没有过期)
_dioCacheManager.clearAll();
Copyright 2019 Hurshi
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.