【问题标题】:CachedNetworkImage image does not change with same nameCachedNetworkImage 图像不会以相同的名称更改
【发布时间】:2019-06-12 13:01:08
【问题描述】:

我使用https://pub.dev/packages/cached_network_image 显示网络图像。

我遇到了一个奇怪的问题。在这里我设置我的个人资料图片和个人资料图片的 url 将相同,只有图片会更改。

假设,如果我第一次上传个人资料图片,那么我会得到像 "https://xx.yyy/user/profileAvatar" 这样的网址,第一次一切正常。但是,当我第二次更改个人资料图片时,我将获得与上面相同的网址以及新图片。但问题出在CachedNetworkImage 无法加载我的新图片。

需要您的指导来解决此问题。

PS。 : 我知道,如果我在上传第二张之前从缓存目录中删除上一张图片,它将解决我的问题。

更新:

天哪,同样的事情甚至不适用于 Image.network

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    如果图像发生变化,我会将其视为新资源。如果我们认为它是一个新资源,那么它确实应该有一个新的资源定位器(即新的 URI)与之关联。如果图像正在更新但使用相同的 URI,那么在任何地方(在浏览器、CDN 等中)缓存图像都会变得非常具有挑战性。

    【讨论】:

      【解决方案2】:

      如果不同图像的 url 没有变化,最好避免使用 CachedNetworkImage... 你可以简单地使用 NetworkImage 小部件

      【讨论】:

        【解决方案3】:

        所以对我来说调用 MyCache.evict(key)、从磁盘中删除图像并调用 setState() 什么也没做。但是,如果我在调用 setState() 之前还调用 MyImageDownloader.evict(key) ,这将触发新的下载,该下载应该为同一个键获取新图像。

        问题是你必须从任何地方驱逐和/或删除图像,包括扩展 ImageProvider 的类,在我的例子中是 MyImageDownloader。

        如果其他所有事情都完成了,你仍然没有收到新图像,那么调用“不推荐”的 PaintingBinding.instance.imageCache.evict(key)

        那里有几个图书馆,都有自己的特殊成分。因此,请尝试使用对您更有效的方法。这个想法是您从任何库的缓存中逐出,从磁盘中删除,然后从扩展 ImageProvider 的任何类中调用 evict。

        【讨论】:

          【解决方案4】:

          当您想要清除 CachedNetworkImage 时使用此代码

          await CachedNetworkImage.evictFromCache(url);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-03
            • 2018-10-05
            • 2011-08-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多