【问题标题】:flutter List not printing out all data in the list颤振列表没有打印出列表中的所有数据
【发布时间】:2021-11-24 14:54:36
【问题描述】:

它们恰好是我的数据库(firestore)中的 665 个项目,我可以查询所有 665 个项目并将其打印到控制台,但是当我将它们放入列表并打印出列表时,我只看到 60 个项目。这是我的代码

getOnlineUsersContact() async {
  List<String> list = [];
  await FirebaseFirestore.instance
      .collection('userPhones')
      .doc(auth.currentUser!.uid)
      .collection("phoneNumbers")
      .get()
      .then((QuerySnapshot querySnapshot) {
    for (var doc in querySnapshot.docs)  {
      String phoneNumber = doc['number'];
      list.add(phoneNumber);
      print("Mycontact: $phoneNumber"); // prints all 665 items
    }
  });
  print("Mycontact: $list"); // prints only 60 items
}

我是否超出了列表的最大数据大小限制?会出什么问题?

【问题讨论】:

  • debugPrint 仍将其剪切为 60
  • 我需要arraylist中的数据完整

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

你需要做两件事:

首先,获取您的查询快照:

final querySnapshot = await FirebaseFirestore.instance
      .collection('userPhones')
      .doc(auth.currentUser!.uid)
      .collection("phoneNumbers")
      .get();

然后,您需要使用 Future.forEach() 来等待遍历列表中的所有项目

List list = [];

await Future.forEach(querySnapsho.docs, (element) async {
// add to list
});

而且,一旦您等待填写列表,您就可以打印了。

会是这样的:

final querySnapshot = await FirebaseFirestore.instance
      .collection('userPhones')
      .doc(auth.currentUser!.uid)
      .collection("phoneNumbers")
      .get();
    
List list = [];

await Future.forEach(querySnapsho.docs, (element) async {
// add to list
});

print(list);

这是因为您没有等待内部 then() 回调。 then() 中的所有内容都将在您不等待的未来某个时间完成。

【讨论】:

  • 谢谢,但上面的代码不起作用,因为我需要定位数据库中的特定字段。示例:字符串 phoneNumber = doc['number']; // 这行不工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-11
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多