如何在Flutter中更改图像缓存的缓存持续时间(软件包:flutter_cached_network_image和flutter_cache_manager)

时间:2019-08-21 10:48:50

标签: caching flutter flutter-dependencies dart-pub

我一直在尝试为抖动中的图像添加缓存,但无法设置缓存持续时间。

我尝试使用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小时)

2 个答案:

答案 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 分钟。

另见: