CircleAvatar の画像を更新しても画面に反映されないの?|File|MemoryImage|FileImage|CircleAvatar|Flutter


アバター画像を丸くクリップしてくれる CircleAvatar は本当に便利で凄く使う。

んだけど、設定した画像を更新(変更)しても、アプリの画面を再起動しないと反映されないっていう事態(不具合)に陥って、困った、困った。

以下みたいな実装だった。

---

CircleAvatar(
  backgroundImage: FileImage(
    File(path)
  ),
);
---

ファイルパスが同じのままで(→ユーザ名をファイル名にして識別していたので)、ファイルの中身である画像データの変更だけを行うように実装していた。

これ、File としてはパスに変化がないから、更新されていないと判断されてしまって、画面に反映されないの…。


直し方(壱之巻)

手放しに推奨できないけど、「MemoryImage」を使った、こういう実装もある。

---
CircleAvatar(
  backgroundImage: MemoryImage(
    File(path).readAsBytesSync()
  ),
);
---

常にファイルから画像データを読み込むので、確実に反映される。そう、副作用は勿論、変更がないのに常に読み込まれてしまうこと。

一覧画面でこの実装を行うと、パフォーマンス的に大問題だと思う。


直し方(弐之巻)

「ファイルパスが同じ(ユーザ名をファイル名にして識別する)」を廃止する。ファイル名は更新した日時(DateTime.now().millisecondsSinceEpoch など)を含むようにする。

こうすれば、確実に反映されるようになるよ。


関連する記事


参照した記事


直近に読んでいた漫画(おすすめ)

コメント

このブログの人気の投稿

ImagePicker を操作すると「Lost connection to device.」とだけ言い残して強制終了するの?|iOS|Flutter

Android SDK バージョン(コンパイルに使用する Android API レベル)を変更するの?|compileSdkVersion|SDK|Android|Flutter