「这是我参与2022初次更文挑战的第17天,活动详情检查:2022初次更文挑战」。
本文翻译自pub:
flutter_cache_manager | Flutter Package (flutter-io.cn)
译时版本:
flutter_cache_manager 3.3.0
v2的破坏性改动
CacheManager v2 当装备自定义 CacheManager 时引入了一些破坏性改动。
检查页面最下方改动的阐明
flutter_cache_manager
CacheManager 用于下载和缓存运用缓存目录中的文件。
缓存多长时刻可经过各种设置来修正。
它运用 Cache-Control HTTP 头部来高效提取文件。
这儿有一个更根底的用法的阐明。更多信息参阅完整文档。
用法
CacheManager 可用多种办法获取一个文件。获取单个文件最简单的办法是调用.getSingleFile
。
var file = await DefaultCacheManager().getSingleFile(url);
getFileStream(url)
回来一个流,第一个结果是要缓存的文件,之后是要下载的文件。
getFileStream(url, withProgress: true)
withProgress 设为 true ,当缓存中找不到文件时,流会触发下载进程。
downloadFile(url)
直接从网络下载。
getFileFromCache
只从缓存提取,假如缓存里没有文件,会回来 no file (没有文件)。
putFile
提供选项用于向缓存中添加一个新文件而不下载它。
removeFile
从缓存中移除一个文件。
emptyCache
从缓存中移除所有文件。
ImageCacheManager(图片缓存管理器)
假如对 CacheManager 运用了 ImageCacheManager mixin(DefaultCacheManager 默许已运用),就能够自由运用下面的 getImageFile
办法:
Stream<FileResponse> getImageFile(String url, {
String key,
Map<String, String> headers,
bool withProgress,
int maxHeight, // This is extra
int maxWidth, // This is extra as well
})
URL 获取的图画从根据装备参数调整巨细,调整巨细后的图画会被存储到缓存中。一般它会保持现有的图片份额。
假如运用其它 高度/宽度 参数,原始图画也会被缓存并用于调整。
其它完成
假如你的文件存储在 Firebase Storage 上,能够运用flutter_cache_manager_firebase 。
自定义
缓存管理器能够经过创立一个新的 CacheManager 来管理。
不要用相同的 key 创立多于一个的 CacheManager ,它们会彼此抵触,这点非常重要。
在这下面的比如中,管理器作为单例创立,但你能够用于示例的 Provider 以在运用的顶级提供一个 CacheManager。下面的比如中有用于文件最大世代、对象最大数量和自定义文件服务的设置。
结构办法的 key 参数是强制的,其它所有变量都是可选的。
class CustomCacheManager {
static const key = 'customCacheKey';
static CacheManager instance = CacheManager(
Config(
key,
stalePeriod: const Duration(days: 7),
maxNrOfCacheObjects: 20,
repo: JsonCacheInfoRepository(databaseName: key),
fileSystem: IOFileSystem(key),
fileService: HttpFileService(),
),
);
}
常见问题
- 缓存文件如何存储?
- 缓存的文件何时更新?
- 缓存的文件何时删去?
缓存文件如何存储?
默许情况下,缓存的文件存储在运用的缓存目录中。这意味着操作体系会随时删去文件。
文件的信息在 Android 、 iOS 和 macOS 中存储在 sqflite 数据库中,在其它平台存储在普通的 JSON 文件中。数据库的文件名是 cacheManager 的 key ,这也是它有必要仅有的原因。
缓存的文件何时更新?
一个有用的 URL 响应应该包含一个 Cache-Control header(头部)。关于 header 的更多信息检查这儿,但是总的来说,它表示保持最新状况的期望时长。这也保存一个 ‘eTag’ ,用于检查(指定的时刻之后)文件是否产生改变或者实际上依然有用。
在检查文件实际上依然有用时,当调用 getSingleFile
或getFileStream
时,总是直接回来缓存中的文件。假如根据 Cache-Control headers 判断文件已经过期,管理器会测验更新文件,并存储一个新的文件到缓存中。当运用 getFileStream
时,更新后的文件也会在流中回来。
缓存的文件何时删去?
文件能够被缓存管理器或操作体系删去。默许情况下,文件存储在缓存目录下,有时会被清掉,例如在 Android 上运用更新时。
缓存管理器运用两个变量来决议何时删去一个文件, maxNrOfCacheObjects
和stalePeriod
。
缓存知道文件最终被运用的时刻。当清空缓存(这会持续产生)时,按最终运用时刻排序有许多文件,还有文件超过过期时刻很久未被运用的,缓存会删去这些文件。
v2的破坏性变更
- 这儿不再需求继承 BaseCacheManager ,能够直接调用结构办法。 BaseCacheManager 现在只是一个接口。 CacheManager 是能够直接运用的完成。
- 结构办法现在需求一个带有一些设定的装备对象,但是一些略微不同。例如,你想存储文件的体系不只是目录,而是一个文件体系。这使你有更多的自由来决议存储文件的位置。
- 参阅自定义中的比如。