大枠
・StreamBuilder・・・リアムタイムに更新する値を再描画なしで反映する
・FutureBuilder・・・一度のみ値を取得し、リアムタイムの変更を反映しない
[FutureBuilder]
class HomeScreen extends StatelessWidget {
final Future<QuerySnapshot> _wordStream =
FirebaseFirestore.instance.collection('cities').get();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Memo Pad'),
),
body: FutureBuilder(
future: _wordStream,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return ListView(
children: snapshot.data!.docs.map((DocumentSnapshot document) {
return ListTile(
title: Text(document['name']),
);
}).toList(),
);
} else {
return Container(
child: CircularProgressIndicator(),
);
}
},
),
);
[StreamBuilder]
class HomeScreen extends StatelessWidget {
final Stream<QuerySnapshot> _wordStream =
FirebaseFirestore.instance.collection('cities').snapshots();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Memo Pad'),
),
body: StreamBuilder(
stream: _wordStream,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return ListView(
children: snapshot.data!.docs.map((DocumentSnapshot document) {
return ListTile(
title: Text(document['name']),
);
}).toList(),
);
} else {
return Container(
child: CircularProgressIndicator(),
);
}
},
),
);
}
}