私はフラッターアプリを作成し、cloud-firestoreを使用しています。これが私のデータベースの外観です
「Driver List」というコレクション内のすべてのドキュメントを、既に使用した文字列の配列で取得する関数が必要ですが、新しい画面のリストビューにそれらを取得します
class DriverList extends StatelessWidget {@overrideWidget build(BuildContext context) {
return new StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection('DriverList').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return new Text('Loading...');
return new ListView(
children: snapshot.data.documents.map((DocumentSnapshot document) {
return new ListTile(
title: new Text(document['name']),
subtitle: new Text(document['phone']),
);
}).toList(),
);
},
);
}}
これには重複する可能性のあるレコードを削除するためのいくつかの追加ロジックがありますが、次のようなものを使用してFirestoreからデータを取得できます。
コレクション参照にアクセスし、クエリの結果を一覧表示し、Firestoreから返されたデータのローカルモデルオブジェクトを作成してから、それらのモデルオブジェクトのリストを返します。
static Future<List<AustinFeedsMeEvent>> _getEventsFromFirestore() async {
CollectionReference ref = Firestore.instance.collection('events');
QuerySnapshot eventsQuery = await ref
.where("time", isGreaterThan: new DateTime.now().millisecondsSinceEpoch)
.where("food", isEqualTo: true)
.getDocuments();
HashMap<String, AustinFeedsMeEvent> eventsHashMap = new HashMap<String, AustinFeedsMeEvent>();
eventsQuery.documents.forEach((document) {
eventsHashMap.putIfAbsent(document['id'], () => new AustinFeedsMeEvent(
name: document['name'],
time: document['time'],
description: document['description'],
url: document['event_url'],
photoUrl: _getEventPhotoUrl(document['group']),
latLng: _getLatLng(document)));
});
return eventsHashMap.values.toList();
}
ソース: https://github.com/dazza5000/austin-feeds-me-flutter/blob/master/lib/data/events_repository.Dart#L