我正在使用Firestore作为数据库,并使用cached_network_image在flutter应用程序(iOS和Android)中加载和缓存图像。我注意到应用程序运行一段时间(在调试模式下)后,应用程序缓存大小太大(+300 mb)。 应用程序在抖动中使用的缓存大小是否有最大限制? 有没有一种方法可以对缓存大小施加一定的限制,以便每当缓存大小达到最大限制时,都会删除最早的缓存文件?
答案 0 :(得分:1)
图像缓存最多可缓存 1000 张图像,最多 100 MB。这可能更多,但至少 100 MB。
答案 1 :(得分:0)
cached_network_image依赖于flutter_cache_manager
一个CacheManager,用于在以下目录的缓存目录中下载和缓存文件 该应用程序。可以更改文件保存时间的各种设置。
工作方式
默认情况下,缓存的文件存储在应用程序的临时目录中。这意味着操作系统可以随时删除文件。
有关文件的信息使用sqflite存储在数据库中。数据库的文件名是cacheManager的键,这就是为什么它必须唯一的原因。
此缓存信息包含文件有效之前的结束日期以及与http缓存控件一起使用的eTag。
方法
removeFile
从缓存中删除文件。
emptyCache
从缓存中删除所有文件。
示例
void _clearCache() {
DefaultCacheManager().emptyCache();
}
如果您希望能够在某个时间后删除图像,则必须实现自定义缓存,该缓存会在给定的天数后删除图像。
来自文档TL:DR
class CustomCacheManager extends BaseCacheManager {
static const key = "customCache";
static CustomCacheManager _instance;
factory CustomCacheManager() {
if (_instance == null) {
_instance = new CustomCacheManager._();
}
return _instance;
}
CustomCacheManager._() : super(key,
maxAgeCacheObject: Duration(days: 7),
maxNrOfCacheObjects: 20);
Future<String> getFilePath() async {
var directory = await getTemporaryDirectory();
return p.join(directory.path, key);
}
答案 2 :(得分:0)
对于您的用例,使用extended_image来缓存图像,并使用clearDiskCachedImages方法清除缓存
// Clear the disk cache directory then return if it succeed.
/// <param name="duration">timespan to compute whether file has expired or not</param>
Future<bool> clearDiskCachedImages({Duration duration})