はじめに
FlutterでFirestoreを使う際に題のような切り替えをする際の備忘録。
FutureとStreamの違いに関してはこちらの記事が参考になった。
やりかた
それぞれ以下のように対応させる。
FutureBuilder
class ListFuture extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FutureBuilder<QuerySnapshot>(
future: FirebaseFirestore.instance.collection('hoge').get(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return new Text('Loading...');
default:
return new ListView(
children: snapshot.data.docs.map((DocumentSnapshot document) {
return new ListTile(
title: new Text(document['hige']),
subtitle: new Text(document['hage']),
);
}).toList(),
);
}
},
);
}
}
StreamBuilder
class ListStream extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection('hoge').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return new Text('Loading...');
default:
return new ListView(
children: snapshot.data.docs.map((DocumentSnapshot document) {
return new ListTile(
title: new Text(document['hige']),
subtitle: new Text(document['hage']),
);
}).toList(),
);
}
},
);
}
}