Introduction

Flutter で WebM を表示させる仕様があって、iOS じゃ表示できないから、 ffmpeg で WebP に変換した。
普通に Image Widget で表示できたからよかったが、画面遷移して同じ画面に戻ってくると…

「あれ?アニメーションが止まってる?」

という具合。

ios

なんで?

How to resolve?

ズバリな答えがこれ。

上記記事はファイルに保存した画像データであるが、本質は同じ。

rootBundle からのデータ取得は非同期処理のため、build で組み込むためにはわざわざ FutureBuilder を使うなど手間がかかる。

1
2
3
4
5
6
7
8
9
10
11
12
FutureBuilder(
future: rootBundle.load("assets/Animation_1709733079844.webp"),
builder: (BuildContext context, AsyncSnapshot<ByteData> snapshot) {
if (snapshot.hasData) {
final byteData = snapshot.data!.buffer;
final binary = byteData.asUint8List();
return Image.memory(binary);
} else {
return const Spacer();
}
},
),

上記は自分の github のリポジトリのコードの抜粋。