目次
はじめに
非同期処理においてFutureとStreamを使うことが多くなったので忘れないように備忘録として違いをまとめます。
Widget of the Week
公式のYoutube動画でわかりやすかったものをまずは見ました。
Future Builder
Stream Builder
FutureとStreamの違い
違い
- Future: 単発の関数、非同期に強い
- Stream: データを監視し続けるのに強い(川のようにデータを渡す)
Future
- 非同期処理を行い、処理を待つラグをなくす
→今日の天気を取得したい場合に、取得するまで待つのでなく非同期で並行して処理を走らせる
- 関数実行時に返り値は一つのため一つの結果のみ取得
- FutureBuilderは、一度だけデータを取得し画面を作る
FutureBuilderについては、こちらでまとめていますのでこちらを参考にしてみてください。
Stream
- 川の流れのように一つずつのデータオブジェクトを渡していくもの
- データの流れを作るため、変数の変化を追うこと可能
- StreamBuilderは、変化するデータによって画面を更新する
- 指定したstreamにデータが流れてくる
コードでの違い
Future
return FutureBuilder<DateTime, String>>(
future: FireStore.getEvent(),
builder: (context, snapshot) {
Firebaseからデータを取ってくる例です。
- future: に関数を設定してその関数を一度だけ実行
- 実行された関数によってsnapshotが決まる
Stream
body: StreamBuilder<QuerySnapshot>(
stream: FireStore.firebaseUsers.doc().collection('myEvents').snapshots(),
builder: (context, snapshot) {
Firebaseからイベントを取ってくる例です。
- stream: に何かしらのsnapshotをセット
- そのsnapshotをbuilderの中で使用していく
snapshotについて
snapshotは頭を悩ますポイントの一つだと思います。
私の場合、下記サイトで理解を深めました。
FlutterでFirestoreのデータを取得するキホン
最後に
簡単ではありますが、FutureとStreamについてまとめてみました。
非同期でアプリを動かす機会が増えたのでもっとここの理解を深め、さらに共有できることが増えるように努めます。
コメント