使用流生成器时数据未存储在列表变量中

Posted

技术标签:

【中文标题】使用流生成器时数据未存储在列表变量中【英文标题】:Data not store in List variable while use stream builder 【发布时间】:2022-01-13 04:04:36 【问题描述】:

当我使用存储在列表变量中的 Firestore 查询数据时,但当我尝试在查询之外使用此数据时,它将不起作用。请帮助我在哪里犯错。

 List<ContactsModelClass> _groupContactList1 ; //declare list variable 
                  _groupCollection
                      .doc(widget.groupId)
                      .collection("groupContactList")
                      .get()
                      .then((docs) 
                    showLog('--->>>>>>$docs.docs.length');
                    _groupContactList1 = List<ContactsModelClass>.generate(
                      docs.docs.length,
                      (index) => ContactsModelClass.fromJson(
                        docs.docs[index].data(),
                      ),
                    );  //Store data in list variable
                    print("init groupList:[$_groupContactList1.length]"); //get data 
                  );                   
                  print(
                      "groupContactList list data:[$_groupContactList1.length]"); // can not access data which store above in code. why?

【问题讨论】:

【参考方案1】:

因为稍后会调用then 回调,您可以在其中设置_groupContactList1 。但是你现在打印_groupContactList1.lenght,还没有设置。

改用 await,试试下面的解决方案:

var docs = await _groupCollection.doc(widget.groupId).collection("groupContactList").get();
showLog('--->>>>>>$docs.docs.length');
_groupContactList1 = List<ContactsModelClass>.generate(
 docs.docs.length,
 (index) => ContactsModelClass.fromJson(docs.docs[index].data()),
);
print("groupContactList list data:[$_groupContactList1.length]");

【讨论】:

【参考方案2】:

您需要使用 await 关键字来从 Firestore 中获取文档。一旦 Firestore 获取数据,然后显示或使用该列表。

【讨论】:

以上是关于使用流生成器时数据未存储在列表变量中的主要内容,如果未能解决你的问题,请参考以下文章

如何将流生成器中的数据显示到文本字段中并更新来自列表视图?

Flutter:拉动刷新和流生成器

Flutter 流:流生成器返回 Null 值

如何从流生成器返回 null

生成器和迭代器_python

python中生成器