【问题标题】:How to change the cache duration of image cache in Flutter (packages: flutter_cached_network_image & flutter_cache_manager)如何更改 Flutter 中图片缓存的缓存时长(包:flutter_cached_network_image & flutter_cache_manager)
【发布时间】:2019-12-26 15:13:14
【问题描述】:

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

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

【问题讨论】:

    标签: caching flutter flutter-dependencies dart-pub


    【解决方案1】:

    当我想更改要缓存的资源的 maxAge 时,我最近遇到了类似的问题。问题是,在内部,cache_manager 会考虑具有 max-age 值的缓存控制响应标头来设置缓存年龄。如果资源没有返回 max-age 响应标头,则默认将其设置为 7 天,我们没有对其进行配置。对于 hack,我们可以在我们链接到自定义缓存管理器的 customHttpGetter 方法中设置响应标头,并让缓存使用它进行缓存。我试过这样做,效果很好!

    https://referbruv.com/blog/posts/caching-get-request-calls-using-flutter-cache-manager

    【讨论】:

      【解决方案2】:

      如果您可以控制图像的来源服务器,则可以自己设置缓存控制标头。例如,在 nginx 中,您可以将 location 块添加到站点可用的配置文件中:

      location ~* \.(?:png|jpg)$ {
          expires 2m;
          add_header Cache-Control "public";
      }
      

      这会将所有 png 和 jpg 文件的缓存过期时间设置为 2 分钟。

      另见:

      【讨论】:

        猜你喜欢
        • 2019-09-29
        • 2018-04-22
        • 2010-11-24
        • 2014-12-23
        • 2011-11-23
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 2012-07-02
        相关资源
        最近更新 更多