我一直在尝试为抖动中的图像添加缓存,但无法设置缓存持续时间。
我尝试使用cached_network_image程序包,在该程序包中有一个自定义缓存管理器,在其中我将缓存持续时间改写为2分钟(而不是将其默认设置为30天),但是图像是被缓存超过2分钟,甚至在1天后仍被缓存。)
当我仅使用Image.network
组件时,就不会缓存图像。
我的自定义缓存管理器:
class ImageCacheManager extends BaseCacheManager {
static const key = "libCachedImageData";
static ImageCacheManager _instance;
factory ImageCacheManager() {
if (_instance == null) {
_instance = new ImageCacheManager._();
}
return _instance;
}
ImageCacheManager._() : super(key, maxAgeCacheObject: Duration(minutes: 2));
Future<String> getFilePath() async {
var directory = await getTemporaryDirectory();
return p.join(directory.path, key);
}
}
预期:图像的缓存时间不会超过我指定的时间(例如2分钟)
实际:图片的缓存时间比我指定的时间长(至少36小时)
答案 0 :(得分:0)
最近,当我想更改要缓存的资源的maxAge时,遇到了类似的问题。事实是,在内部cache_manager会考虑具有max-age值的缓存控制响应标头,以设置缓存寿命。而且,如果资源未返回最大寿命响应标头,则默认情况下会将其设置为7天,而我们没有配置。对于黑客来说,我们可以在链接到自定义缓存管理器的customHttpGetter方法中设置响应头,并让缓存将其用于缓存。我尝试过这样做,效果很好!
https://referbruv.com/blog/posts/caching-get-request-calls-using-flutter-cache-manager
答案 1 :(得分:0)
如果您可以控制来自图像的服务器,您可以自己设置缓存控制标头。例如,在 nginx 中,您可以将位置块添加到站点可用的配置文件中:
location ~* \.(?:png|jpg)$ {
expires 2m;
add_header Cache-Control "public";
}
这会将所有 png 和 jpg 文件的缓存过期时间设置为 2 分钟。
另见: