我有一个关于使用有状态小部件中的Image.network更新图像的问题,在更改设置状态内的网址时它没有更新,但是当我进行热重新加载时,图像已更新。
任何人都知道它为什么会发生?
答案 0 :(得分:1)
如果网址与以前相同,请尝试在网址中添加一些随机查询字符串,例如:
Image.network(url + "?v=1");
答案 1 :(得分:1)
这将确保在重建小部件树时,图像小部件得到 也重建了
Image(
image: NetworkImageSSL(_imageUrlPath),
fit: BoxFit.cover,
key: ValueKey(new Random().nextInt(100)),),
),
然后清除图像缓存
In my case have to clear image cache when image is uploaded to server
Ex=>
saveDataToServer(){
if(onSucess){
imageCache.clear();
imageCache.clearLiveImages();
}
}
答案 2 :(得分:0)
为Image.network提供一个以url为值的密钥。
key: ValueKey(url)
答案 3 :(得分:0)
清除两个图像缓存并添加密钥是可行的,但这似乎有点过头了。 Ian的答案是在url中使用参数,但是我想要一些缓存,并且不想向服务器请求参数。 因此,我最终得到了以下解决方案,该解决方案使用了intl包中的DateFormat。
// Make parameter using DateFormat. This image will be cached for a minute.
var nowParam = DateFormat('yyyyddMMHHmm').format(DateTime.now());
// Use # instead of ? or & in url as nothing after # is transmitted to the server.
var img = Image.network(url + '#' + nowParam);
答案 4 :(得分:-1)
我通过在Image.newtwork中添加密钥值来解决此问题,然后您需要每次删除缓存,然后再发布缓存。
imageCache.clear();
Image myimage = Image.network('url', key: ValueKey(new Random().nextInt(100)),);