在Flutter中,咱们能够用下面的代码从文件中加载图像:缓存
Image.file(File(_fileName));
这个时候,当_fileName这个文件名称和路径不变,文件内容变化时,Flutter并不会更新显示。问题产生的缘由是Flutter自动使用了缓存。ide
那么怎么办呢?测试
我查看到,Image.file 实际上会将 image 设置为 FileImage 这个 ImageProvider。FileImage 的代码中,在进行 operator 时,只判断了文件路径和缩放比例。正是由于如此,咱们文件路径不变,缩放比例不变时,Flutter会认为咱们仍是用的原图,并不会从新进行加载。spa
因而,我想到了办法是扩展一个FileImage,将这个 operator 的方式改一下。code
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; } }
接下来,直接使用下面的代码来加载图像:blog
Image(image: FileImageEx(File(_fileName)));
经测试,问题获得解决。class
若是您有更好的方式,欢迎留言。扩展