[Flutter] Image.File 加載圖像時文件內容變化顯示不變解決

在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

若是您有更好的方式,歡迎留言。擴展

相關文章
相關標籤/搜索