ページ遷移するまで時間がかかる場合にスピナー(CircularProgressIndicator())
を表示させたいです。
https://flutter.dev/docs/cookbook/plugins/play-video
スピナー表示に関しては上記ページで動画再生準備完了までの間スピナーを表示するサンプルがあるのですが、FutureBuilderを使っており、futureに関してはVideoPlayerControllerクラスを使えば、その中で自動的に用意してくれるので、それをFutureBuilderの引数に設定すれば、それだけでできる、ということらしいです。
ということで、そういうのを用意してくれていれば、それを使えばいいと思うのですが。
つまり、今回の場合、ページ遷移した時にコンプリートするfutureを用いてFutureBuilderを作る必要があるのだと思うのですが。
このfutureは自分で実装するしかないのでしょうか?
「ページ遷移するまでスピナー表示させたい」という要求自体かなり一般的な気がするので、すでにそういうfutureを作る仕組みが用意されているのならそれを使いたいのですが、あるんでしょうか?
ページ遷移するまで時間がかかるのは具体的にどんな処理が原因でしょうか?
例えばサーバーとの通信や、ファイル読み書きなどがあります。ただ単に〇秒待ったあとにのFutureを返すメソッドも作ることもできます。
回答を頂きましてありがとうございます。
今回は、「一覧リスト表示画面」と「動画再生画面」がありまして、
「一覧リスト表示画面」内のボタンを押す(ファイルを選択)
↓
「一覧リスト表示画面」で選択されたファイルを作成(10秒程度)
↓
作成完了後「動画再生画面」へ遷移。その際作成したファイルを
引数として渡す。
↓
「動画再生画面」で再生準備完了までの間スピナー表示(1秒程度)
↓
動画再生
という流れで、ファイル作成で時間がかかっているのにその間はスピナーも何もなく「一覧リスト表示画面」が表示されているだけなので、ユーザーも「え?動いてるの?」という感じです笑
対応としては
(1)「一覧リスト表示画面」で、ページ遷移で完了するfutureを作ってスピナーを表示させる。
(2)「動画再生画面」でファイルを作成し、「ファイル作成→動画再生準備」が完了した時にコンプリートするfutureを作る→スピナーを表示。
上記の選択肢が頭に浮かぶのですが、(2)に関して、firebase_storageにあるファイルをクライアント側で作成(複製)するのは非同期処理になると思うのですが、
「動画再生画面」ウィジェットのbuild()メソッド内でawaitが使えない気がします。なので(2)の選択肢は不可能なんですかね?
であれば(1)になるのですが、ページ遷移完了でコンプリートするfutureの作り方がわかりません。
少し整理させてください。
対応策(1)
1.「一覧リスト表示画面」で動画一覧を表示。
2.動画を選択するとstorageから動画をダウンロード(ダウンロードされるまでスピナー表示)
3.ダウンロード完了後、「動画再生画面」へ遷移
4.再生準備完了されるまでスピナー表示
対応策(2)
1.「一覧リスト表示画面」で動画一覧を表示。
2.動画を選択すると「動画再生画面」へ遷移
3.遷移後、storageから動画をダウンロード(ダウンロード→再生準備完了までスピナー表示)
以上のような順序の認識で間違いないですか?
はい、そのように考えています。
ただやはり(2)の場合、「動画再生画面」ウィジェットのbuild()メソッド内でファイルを複製(ダウンロード)する処理はできないんですよね。(awaitが使えない。)
ただ、VideoPlayerの準備も非同期処理のはずで、それはできているので、結局ファイル複製(ダウンロード)もどうにかしたらできるはず、だとは思うのですけどね。
回答1件
あなたの回答
tips
プレビュー