在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)));

经测试,问题得到解决。

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

最新文章

  1. 第3章 Linux常用命令(2)_权限管理命令
  2. 20161014006 DataGridView Combobox 数据绑定与传值
  3. JavaScript学习08 Cookie对象
  4. Python调用C的SDK出现返回值不符合预期以及Segmentation fault
  5. JS闭包的理解
  6. Java笔记——面向接口编程(DAO模式)
  7. Slony-I的删除:
  8. ubuntun安装ssh,并远程链接服务器操作
  9. 万事开头难——Cocos2d-x学习历程(一)
  10. FPC全制造组装的流程介绍(转载)
  11. Spring集成Quarz开发环境搭建
  12. Python——组图Canvas控制参数
  13. ansible小结常用模块
  14. Java之@SuppressWarnings
  15. node.js初识11
  16. 全局css , 样式设置, css 初始化. css ,style ,全局样式, 初始化样式
  17. solr系统query检索词特殊字符的处理
  18. mysql关于timestamp字段相关内容
  19. PHP文件上传大小设置
  20. spring boot 2.0 源码分析(四)

热门文章

  1. Java项目体验
  2. LAMP环境安装实例
  3. hdu 5285 二分图黑白染色
  4. java反射+java泛型,封装BaseDaoUtil类。供应多个不同Dao使用
  5. 【转】每天一个linux命令(59):rcp命令
  6. oracle之 11.2.0.4 bbed安装
  7. ORACLE expdp/impdp详解
  8. windows 安装操作系统时切换分区表格式
  9. Open Flash Chart 之线图(二)
  10. Python 中的sort()排序