最近のアプリは非同期処理が多くなっています。
また、いつどのタイミングで発生するのかは明確には決まっておらず、処理の流れが複雑になりがちです。
こうした非同期的なイベント処理は、データストリーム(連続したデータを流れるものとして捉える)と考えることが良いのではないでしょうか?
Dart言語は非同期データストリームを大きくサポートしており、
Flutterアプリでは、StreamBuilderウィジェットを使うことで、ストリームから流れるイベントを取得することができます。
新しいイベントごとに小要素を再作成し、最新イベントに与え連携させます。
StreamBuilderのコンストラクタに、streamを与えます。
また、builderにsnapshotを渡し、アプリの当該部分の外観を宣言します。
FireStoreからデータを取得する際の実装例が以下です。
また、初期データinitialData
を与えて、最初のイベントの待機中にウィジェットに表示させることもできます。
initialData
を設定しない場合は、snapshotにデータが存在するかsnapshot.hasData
必ず確認しましょう。
まだであれば、ローディングインジケータを表示しても良いでしょう。
上記の実装ではLinearProgressIndicator
を利用しています。
詳しくは、ConnectionStateを確認します。
エラーハンドリングは、snapshot.hasError
が便利です。
おしまい。