如何在Flutter中重新加载FileImage

时间:2018-10-02 02:02:31

标签: dart flutter

假设我在设备的磁盘上有一个映像,然后将其加载到屏幕上,以提供指向FileImage的路径。

我编辑该图像并将其保存在相同的路径上,期望调用setState(() {})函数将重新加载该图像。但事实并非如此。

我尝试通过调用imageCache.clear()函数和imageProvider.evict()来清除图像缓存,但没有区别。

如果我关闭该页面并再次打开它,则会看到更新的图像。

我假设屏幕上显示的图像在内存中,如果我的假设正确,如何重新加载?

4 个答案:

答案 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似乎没有效果。 ..因此请确保您不在这场比赛中。