CircleAvatar の画像を更新しても画面に反映されないの?|File|MemoryImage|FileImage|CircleAvatar|Flutter
アバター画像を丸くクリップしてくれる CircleAvatar は本当に便利で凄く使う。
んだけど、設定した画像を更新(変更)しても、アプリの画面を再起動しないと反映されないっていう事態(不具合)に陥って、困った、困った。
以下みたいな実装だった。
---
CircleAvatar(
backgroundImage: FileImage(
---
File(path)
),
);---
ファイルパスが同じのままで(→ユーザ名をファイル名にして識別していたので)、ファイルの中身である画像データの変更だけを行うように実装していた。
これ、File としてはパスに変化がないから、更新されていないと判断されてしまって、画面に反映されないの…。
直し方(壱之巻)
手放しに推奨できないけど、「MemoryImage」を使った、こういう実装もある。
---
CircleAvatar(
CircleAvatar(
backgroundImage: MemoryImage(
---
File(path).readAsBytesSync()
),
);---
常にファイルから画像データを読み込むので、確実に反映される。そう、副作用は勿論、変更がないのに常に読み込まれてしまうこと。
一覧画面でこの実装を行うと、パフォーマンス的に大問題だと思う。
直し方(弐之巻)
「ファイルパスが同じ(ユーザ名をファイル名にして識別する)」を廃止する。ファイル名は更新した日時(DateTime.now().millisecondsSinceEpoch など)を含むようにする。
こうすれば、確実に反映されるようになるよ。
関連する記事
参照した記事
- How to give the CircleAvatar an image from memory
- how to add Image.file as backgroundimage of Circle avatar
- How to display picked image in a circle avatar in Flutter?
コメント
コメントを投稿