[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で理解深めます。
この記事が気に入ったらサポートをしてみませんか?