【问题标题】:Flutter forEach future为每个未来而颤动
【发布时间】:2021-02-11 06:38:49
【问题描述】:

我正在尝试从 firebase 获取一些数据,然后将该数据发送到 firebase 中的另一个请求。这样做的问题是,当我调用我的函数时,我得到了代码末尾空的列表的打印,但之后我打印了应该在列表中的结果。我认为这是由于它不等待它完成的 forEach 函数。在这里,您可以看到代码和输出的照片。 https://gyazo.com/0867cb3cde904146dab12ccd907c6341

我该怎么做才能让列表在打印出来后显示名称

Future <List<Map < dynamic, dynamic >>> getData() async {
  List lists = [];
  DataSnapshot snapshot = await databaseReference.once();
  Map < dynamic, dynamic > values = snapshot.value;
  
  values.forEach((key, values) async {
      DataSnapshot snapshot = await FirebaseDatabase.instance.reference().child("Users/" + values["UID"].toString() + "/Name").once();
      lists.add(snapshot.value);
      print(snapshot.value);
   });
   print(lists);

}

【问题讨论】:

  • “我该怎么做才能让列表在打印出来后显示名称” - 使用Future.forEach
  • gyazo.com/e0c089e3ef56daac3d3b0a0ee119a2fd 我该如何解决这个问题?
  • 使用Future.forEach静态方法-Future.forEch(elements, ...)
  • await Future.forEach(values.values, (value) {...})
  • 欢迎您,然后写一个自我回答

标签: flutter


【解决方案1】:

是的,你在 values.forEach((key, values)) 完成之前打印列表的问题它可以工作,你可以做正确的方法来检查值的所有元素是否都被处理然后打印列表,例如

int count = values.length;

values.forEach((key, values) async {
      DataSnapshot snapshot = await FirebaseDatabase.instance.reference().child("Users/" + values["UID"].toString() + "/Name").once();
      lists.add(snapshot.value);
      print(snapshot.value);
      count--;
      if (count == 0) {
         print(lists);
      }
   });

【讨论】:

    【解决方案2】:

    如果您使用 forEach,并使内部函数异步,它不会等待整个 forEach,这就是它打印空列表的原因。
    你可以使用for循环。

    【讨论】:

      【解决方案3】:

      您可以使用 for 循环来执行此操作。

      for(value in values)async
      {
      DataSnapshot snapshot = await FirebaseDatabase.instance.reference().child("Users/" + value["UID"].toString() + "/Name").once();
            lists.add(snapshot.value);
            print(snapshot.value);
      }
      

      【讨论】:

        猜你喜欢
        • 2023-01-18
        • 1970-01-01
        • 2019-07-27
        • 1970-01-01
        • 2021-01-25
        • 2021-08-02
        • 2018-01-24
        • 2020-07-19
        • 2020-06-01
        相关资源
        最近更新 更多