简体   繁体   English

Flutter 从 QuerySnapshot 转换为 Future <list<map<dynamic, dynamic> >> </list<map<dynamic,>

[英]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

如何转换 Stream <querysnapshot<map<string, dynamic> &gt;&gt; 到列表<object> ? Flutter<div id="text_translate"><p> 在 cloud_firestore 的最后一次更新中,当我使用旧代码运行应用程序时出现错误。 如何将 Stream&lt;QuerySnapshot&lt;Map&lt;String, dynamic&gt;&gt;&gt; 转换为列表?</p><p> 我有这个代码,我得到 null 值:</p><pre> Stream&lt;List&lt;Model&gt;&gt; getReviews(String id) { try { return _collectionReference.doc(id).collection('reviews').orderBy('date', descending: true).snapshots().map((reviews) =&gt; reviews.docs.map((review) =&gt; Model.fromJson(review.data()))); } catch (error) { return error.message; }</pre><p> } </p></div></object></querysnapshot<map<string,> - How can I convert a Stream<QuerySnapshot<Map<String, dynamic>>> to a List<Object>? Flutter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何转换 Stream <querysnapshot<map<string, dynamic> &gt;&gt; 到列表<object> ? Flutter<div id="text_translate"><p> 在 cloud_firestore 的最后一次更新中,当我使用旧代码运行应用程序时出现错误。 如何将 Stream&lt;QuerySnapshot&lt;Map&lt;String, dynamic&gt;&gt;&gt; 转换为列表?</p><p> 我有这个代码,我得到 null 值:</p><pre> Stream&lt;List&lt;Model&gt;&gt; getReviews(String id) { try { return _collectionReference.doc(id).collection('reviews').orderBy('date', descending: true).snapshots().map((reviews) =&gt; reviews.docs.map((review) =&gt; Model.fromJson(review.data()))); } catch (error) { return error.message; }</pre><p> } </p></div></object></querysnapshot<map<string,> - How can I convert a Stream<QuerySnapshot<Map<String, dynamic>>> to a List<Object>? Flutter Flutter 错误:参数类型'Stream <querysnapshot<map<string, dynamic> &gt;&gt;' 不能分配给参数类型'Future <querysnapshot<object?> &gt; </querysnapshot<object?></querysnapshot<map<string,> - Flutter error: The argument type 'Stream<QuerySnapshot<Map<String, dynamic>>>' can't be assigned to the parameter type 'Future<QuerySnapshot<Object?>> 如何度过“未来” <List<QuerySnapshot<Map<String, dynamic> &gt;&gt;&gt; 并获取数据 - how to get through 'Future<List<QuerySnapshot<Map<String, dynamic>>>> and get data Flutter:未处理的异常:类型“QuerySnapshot”不是“Future”类型的子类型<dynamic> ? - Flutter: Unhandled Exception: type 'QuerySnapshot' is not a subtype of type 'Future<dynamic>?' 'Future 类型的值<querysnapshot<map<string, dynamic> &gt;&gt;' 不能分配给“QuerySnapshot”类型的变量<object?> ' </object?></querysnapshot<map<string,> - A value of type 'Future<QuerySnapshot<Map<String, dynamic>>>' can't be assigned to a variable of type 'QuerySnapshot<Object?>' '未来<querysnapshot> ' 不是类型 'Stream 的子类型<dynamic> '?</dynamic></querysnapshot> - 'Future<QuerySnapshot>' is not a subtype of type 'Stream<dynamic>'? _MapStream 抛出异常<QuerySnapshot<Map<String, dynamic> &gt;, 列表<UserModel> ?&gt; 听过 - An exception was throw by _MapStream<QuerySnapshot<Map<String, dynamic>>, List<UserModel>?> listened by Flutter 参数类型 &#39;StreamTransformer<dynamic, dynamic> &#39; 不能分配给参数类型 StreamTransformer <QuerySnapshot List<Message> &gt; - Flutter The argument type 'StreamTransformer<dynamic, dynamic>' can't be assigned to the parameter type StreamTransformer<QuerySnapshot List<Message>> Flutter 如何进入未来<DocumentSnapshot<Map<String, dynamic> &gt;&gt; 内图 - Flutter How to reach into Future<DocumentSnapshot<Map<String, dynamic>>> inner map “未来”的实例<map<dynamic, dynamic> &gt;' </map<dynamic,> - Instance of 'Future<Map<dynamic, dynamic>>'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM