【Flutter】FututreとStreamの違い

flutter

はじめに

非同期処理においてFutureStreamを使うことが多くなったので忘れないように備忘録として違いをまとめます。

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のデータを取得するキホン

最後に

簡単ではありますが、FutureStreamについてまとめてみました。
非同期でアプリを動かす機会が増えたのでもっとここの理解を深め、さらに共有できることが増えるように努めます。

コメント

タイトルとURLをコピーしました