snapshotとは
非同期プログラミングやウィジェットの状態の変更を監視する際に使用される概念。
主に FutureBuilder や StreamBuilder などのウィジェットと組み合わせて利用される。
FutureBuilder での snapshot
FutureBuilder は非同期処理が完了するまで待ち、その後に特定のウィジェットを構築する。snapshot プロパティを介して非同期操作の結果にアクセスする。
FutureBuilder<String>(
future: fetchData(), // 非同期処理を行う Future オブジェクト
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator(); // データがまだ取得されていない場合のローディング表示
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
// データが取得された場合
return Text('Data: ${snapshot.data}');
}
},
)
snapshot.connectionState
は非同期操作の状態を示す。
StreamBuilder での snapshot
StreamBuilder は Stream(非同期イベントのストリーム)を監視し、新しいデータが流れるたびに再構築する。
StreamBuilder<String>(
stream: myStream(), // 非同期イベントのストリーム
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
return Text('Data: ${snapshot.data}');
}
},
)