[Flutter] Image.File 加载图像时文件内容变化显示不变解决
2024-08-25 13:11:09
在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)));
经测试,问题得到解决。
如果您有更好的方式,欢迎留言。
最新文章
- 第3章 Linux常用命令(2)_权限管理命令
- 20161014006 DataGridView Combobox 数据绑定与传值
- JavaScript学习08 Cookie对象
- Python调用C的SDK出现返回值不符合预期以及Segmentation fault
- JS闭包的理解
- Java笔记——面向接口编程(DAO模式)
- Slony-I的删除:
- ubuntun安装ssh,并远程链接服务器操作
- 万事开头难——Cocos2d-x学习历程(一)
- FPC全制造组装的流程介绍(转载)
- Spring集成Quarz开发环境搭建
- Python——组图Canvas控制参数
- ansible小结常用模块
- Java之@SuppressWarnings
- node.js初识11
- 全局css , 样式设置, css 初始化. css ,style ,全局样式, 初始化样式
- solr系统query检索词特殊字符的处理
- mysql关于timestamp字段相关内容
- PHP文件上传大小设置
- spring boot 2.0 源码分析(四)