[英]Flutter Convert from QuerySnapshot to a Future <List<Map<dynamic, dynamic>>>
How do I return a QuerySnapshot as a Future >>?如何将 QuerySnapshot 作为 Future >> 返回?
Code snippet:代码片段:
Future <List<Map<dynamic, dynamic>>>() {
List<Map<dynamic,dynamic>> list;
.....
.....
QuerySnapshot collectionSnapshot = await collectionRef.getDocuments();
list = collectionSnapshot.documents; <--- ERROR
return list;
}
I think I need to use a Map of but couldn't get around it to work.我想我需要使用 Map 但无法绕过它来工作。
collectionSnapshot.documents return List and not List types, you will need to convert List of documentsnapshots to List<Map<dynamic, dynamic>>
. collectionSnapshot.documents 返回 List 而不是 List 类型,您需要将 List of documentsnapshots 转换为
List<Map<dynamic, dynamic>>
。 My be something like this:我是这样的:
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;
}
@Ganapat, your answer solved my problem. @Ganapat,您的回答解决了我的问题。 Thank you
谢谢
Ganapat's answer worked out for me with a few minor changes. Ganapat 的回答对我有用,做了一些小改动。
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;
}
Proper way of using QuerySnapshot
in the FutureBuilder
is as follows:在
FutureBuilder
中正确使用QuerySnapshot
的方法如下:
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FutureBuilder<QuerySnapshot>(
future: FirebaseFirestore
.instance
.collection('users') // 👈 Your collection name here
.get(),
builder: (_, snapshot) {
if (snapshot.hasError) return Text('Error = ${snapshot.error}');
if (snapshot.connectionState == ConnectionState.waiting) {
return const Text("Loading");
}
return ListView(
children: snapshot.data!.docs.map((DocumentSnapshot document) {
Map<String, dynamic> data = document.data()! as Map<String, dynamic>;
return ListTile(
title: Text(data['avatar']), // 👈 Your valid data here
);
}).toList());
},
)),
);
}
Also refer: How to use StreamBuilder
and FutureBuilder
for single and multiple documents另请参阅: How to use
StreamBuilder
and FutureBuilder
for single and multiple documents
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.