首页 > 解决方案 > 在 Flutter 中的 Future 中添加列表项不返回任何项

问题描述

在颤振中,我从 firebase 数据库中读取了两次。第一个代码读取在数组中找到的文档的所有引用。下一个代码遍历所有引用并在 firebase 中加载该引用的文档数据。当我调试时,只要我在 forEach 循环中,rests 数组就会被填充。但是一旦 forEach 循环完成,其余列表是空的吗?怎么会这样?我想要做的是继续将数据添加到 CustomerRestaurantsWithLunchCard = c 到类中存在的餐厅列表中

  Future<CustomerRestaurantsWithLunchCard>
      customerRestaurantsWithLunchards() async {
    var c = await _service.document(
        path: APIPath.customerRestaurantsWithLunchCardsDocument(customerId),
        builder: (data, id) =>
            CustomerRestaurantsWithLunchCard.fromMap(data, id));

    var rests = new List<Restaurant>();

    c.myRestaurantsReferences.forEach((reference) {
      _service.document(
          path: (reference),
          builder: (data, id) => {
                rests.add(new Restaurant(
                  id: id,
                )),
              });
    });

    c.restaurants = rests;
    return c;
  }

Future<T> document<T>({
    @required String path,
    @required T builder(Map<String, dynamic> data, String id),
  }) {
    final reference = FirebaseFirestore.instance.doc(path);
    final snapshots = reference.get();
    return snapshots.then((value) => builder(value.data(), value.id));
  }

标签: firebaseflutterdart

解决方案


将等待添加到 foreach 中的第二个 _service.document:

Future<CustomerRestaurantsWithLunchCard>
      customerRestaurantsWithLunchards() async {
    var c = await _service.document(
        path: APIPath.customerRestaurantsWithLunchCardsDocument(customerId),
        builder: (data, id) =>
            CustomerRestaurantsWithLunchCard.fromMap(data, id));

    List<Restaurant> rests = await new List<Restaurant>(); 
    await c.myRestaurantsReferences.forEach((reference) {
      await _service.document(
          path: (reference),
          builder: (data, id) => {
                rests.add(new Restaurant(
                  id: id,
                )),
              });
    });

    c.restaurants = await rests;
    return c;
  }

推荐阅读