firebase - 在 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));
}
解决方案
将等待添加到 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;
}
推荐阅读
- reactjs - 将文件上传状态从 react-dropzone 组件发送到父级?
- django - 使用 FactoryBoy 自动添加
- encryption - Azure 资源管理器 REST API - 静态加密?
- r - 在 R 中创建自定义距离矩阵函数
- java - java.lang.NoClassDefFoundError: kotlin/TypeCastException 使用 OkHttp 运行代码时
- reactjs - 单击图表上的数据点时的 echarts-for-react 调用组件
- c# - C#:变量前面的符号
- c# - 将 JSON 文件序列化为类和字典
- php - ckeditor5 vue检查图像已经被删除
- google-compute-engine - 谷歌控制台引擎 SSH sudo 密码