[Flutter] Image.File 加载图像时文件内容变化显示不变解决

本文详细介绍了在Flutter中遇到的图片更新不及时的问题及其解决方案。当文件内容改变但路径不变时,Flutter会因缓存机制而无法更新图像。通过创建FileImageEx类并覆盖其equals方法,可以实时监测文件大小变化,确保图片更新。此方法适用于需要频繁更新图像的应用场景。

在Flutter中,我们可以用下面的代码从文件中加载图像:

Image.file(File(_fileName));

这个时候,当_fileName这个文件名称和路径不变,文件内容变化时,Flutter并不会更新显示。问题产生的原因是Flutter自动使用了缓存。

那么怎么办呢?

我查看到,Image.file 实际上会将 image 设置为 FileImage 这个 ImageProvider。FileImage 的代码中,在进行 operator 时,只判断了文件路径和缩放比例。正是因为如此,我们文件路径不变,缩放比例不变时,Flutter会认为我们还是用的原图,并不会重新进行加载。

于是,我想到了办法是扩展一个FileImage,将这个 operator 的方式改一下。

class FileImageEx extends FileImage {
  int fileSize;
  FileImageEx(File file, { double scale = 1.0 })
      : assert(file != null),
        assert(scale != null),
        super(file, scale: scale) {
    fileSize = file.lengthSync();
  }

  @override
  bool operator ==(dynamic other) {
    if (other.runtimeType != runtimeType)
      return false;
    final FileImageEx typedOther = other;
    return file?.path == typedOther.file?.path
        && scale == typedOther.scale && fileSize == typedOther.fileSize;
  }

}

接下来,直接使用下面的代码来加载图像:

Image(image: FileImageEx(File(_fileName)));

经测试,问题得到解决。

如果您有更好的方式,欢迎留言。

 

转载于:https://www.cnblogs.com/yangyxd/p/10044094.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值