見出し画像

[Flutter] streamとstreamBuilder

こんにちは...
最近転職活動にやられ始めたので、STRONG SEROでエネルギ摂取を心がけてます。

冗談はさておき、titleの内容に触れていきたいと思います。

Firestoreとflutterを合わせてチャットアプリを作っていたのですが、いまいちstreamBuilderについての理解が浅いので、書いていこうと思います。

そもそもStreamとは

String型の非同期処理ではFutureを使いますが、単一のデータしか扱えないという制約があります。これに対し、0か複数のデータを扱う場合、例えば、Listなどは、Streamを使います。

streamBuilderとは

streamBuillderはwidgetであり、streamで引っ張ってきたデータを画面に出力する役割を持っている。という理解。

特徴は、データの更新に伴い、情報を追加して表示してくれる。例えば新しいイベントがきた場合には、それに対応して画面の表示を更新してくれる。

Propertyはstreamとbuilderが必要で、builderでデータを扱う。

child: StreamBuilder<QuerySnapshot>(
         stream: //ここにはStream<int>や、"firestoreのインスタンス".collectioin('~').snapshot()などが来る,
         builder: (context,snapshot) {
           List<Widget> children;
           
           //ここで、hasErrorやhasDataなどでエラーハンドリングを行う。
           if (snapshot.hasError) {
             
           }
           final messages = snapshot.data.documents;
           //snapshot:asyncSnapshotのデータ
           //.data: querySnapshotのデータ
           //.document: Listデータ
          
         }
 )

の流れです。
*QuerySnapshotは、firestore databaseに格納されてるデータのひとまとまりのDocumentSnapshotの事(リファレンス

でもやっぱりわからない

今回はfirestoreと合わせた時に、画面に出力するためにStreamBuilderを用いてますが、そうではない場合。Streamでsinkと合わせて使う場合どうなるのかがわかってないのかも。

色々資料は見たけどやっぱ自分でコード書かなきゃわからないことばっかりなので、try&Errorで理解深めます。










この記事が気に入ったらサポートをしてみませんか?