【问题标题】:Flutter Convert from QuerySnapshot to a Future <List<Map<dynamic, dynamic>>>Flutter 从 QuerySnapshot 转换为 Future <List<Map<dynamic, dynamic>>>
【发布时间】:2018-12-01 11:25:40
【问题描述】:
如何将 QuerySnapshot 作为 Future 返回 >> ?
代码sn-p:
Future <List<Map<dynamic, dynamic>>>() {
List<Map<dynamic,dynamic>> list;
.....
.....
QuerySnapshot collectionSnapshot = await collectionRef.getDocuments();
list = collectionSnapshot.documents; <--- ERROR
return list;
}
我认为我需要使用 Map of 但无法绕过它来工作。
【问题讨论】:
标签:
firebase
dictionary
dart
google-cloud-firestore
flutter
【解决方案1】:
collectionSnapshot.documents 返回 List 而不是 List 类型,您需要将 Documentsnapshots 列表转换为 List<Map<dynamic, dynamic>>。
我是这样的:
Future <List<Map<dynamic, dynamic>>> getCollection() async{
List<DocumentSnapshot> templist;
List<Map<dynamic, dynamic>> list = new List();
CollectionReference collectionRef = Firestore.instance.collection("path");
QuerySnapshot collectionSnapshot = await collectionRef.getDocuments();
templist = collectionSnapshot.documents; // <--- ERROR
list = templist.map((DocumentSnapshot docSnapshot){
return docSnapshot.data;
}).toList();
return list;
}
【解决方案2】:
加纳帕特的回答对我来说是一些小的改动。
Future <List<Map<dynamic, dynamic>>> getCollection() async{
List<DocumentSnapshot> templist;
List<Map<dynamic, dynamic>> list = new List();
CollectionReference collectionRef = Firestore.instance.collection("path");
QuerySnapshot collectionSnapshot = await collectionRef.get(); // <--- This method is now get().
templist = collectionSnapshot.documents; // <--- ERROR
list = templist.map((DocumentSnapshot docSnapshot){
return docSnapshot.data() as Map<Dynamic,Dynamic>; // <--- Typecast this.
}).toList();
return list;
}