假设我在设备的磁盘上有一个映像,然后将其加载到屏幕上,以提供指向FileImage
的路径。
我编辑该图像并将其保存在相同的路径上,期望调用setState(() {})
函数将重新加载该图像。但事实并非如此。
我尝试通过调用imageCache.clear()
函数和imageProvider.evict()
来清除图像缓存,但没有区别。
如果我关闭该页面并再次打开它,则会看到更新的图像。
我假设屏幕上显示的图像在内存中,如果我的假设正确,如何重新加载?
答案 0 :(得分:0)
改变图像的键会达到目的吗?
为图像设置密钥
Image.file(
_imageFile,
key: _key,
fit: BoxFit.cover,
),
并在每次更改_imageFile时更改密钥,例如,将其设置为时间戳记
setState(() {
_imageFile = newImageFile;
_key = DateTime.now().millisecondsSinceEpoch;
});
答案 1 :(得分:0)
我知道我来晚了,但是我使用了以下解决方法:
_tmpImageFile.existsSync() ? Image.memory(
Uint8List.fromList(_tmpImageFile.readAsBytesSync()),
alignment: Alignment.center,
height: 200,
width: 200,
fit: BoxFit.contain,
) : Container(),
答案 2 :(得分:0)
已测试 - 添加两个图像缓存命令将解决问题。
imageCache.clear();
imageCache.clearLiveImages();
});
答案 3 :(得分:-1)
这也对我有用:
Image previewImage = Image.file(
File(scenePreviewFilename),
);
当按下按钮或其他命令时,像这样从imageCache中逐出缓存的图像:
setState(() {
imageCache.evict(previewImage.image, includeLive: true);
});
PS:我遇到了一些问题,使其无法正常工作(类似于最初的帖子),因为我正在另一个线程中生成图像,并且在生成图像之前就已加载了该图像,导致imageCache似乎没有效果。 ..因此请确保您不在这场比赛中。