firebase - 用于列表构建的 Flutter 中的 Firestore 嵌套查询
问题描述
我的 Firestore 数据库中有两个集合;“查询”和“用户”。我的要求是从“查询”集合中获取有关特定标志的所有查询。完成后,我需要检查每个查询中的 uid 并使用“用户”集合中的该 uid 查询我的用户数据。在这种情况下,我在 Flutter 中使用 StreamBuilder 获取用户的姓名和号码。以下是我的方法:
return new StreamBuilder(
stream: db.collection("queries").where("isAttended", isEqualTo: false).snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot){
if(!snapshot.hasData) return new Text("Loading...");
return new ListView(
children: snapshot.data.documents.map((document){
String name = '';
String number = '';
var doc = db.collection("users").document(document["uid"]).get();
doc.then((onValue) {
number = onValue.data['number'];
name = onValue.data['name'];
});
return new ListTile(
title: new Text(name),
subtitle: new Text(number),
);
}).toList(),
);
},
);
问题是 onValue 返回 null。请就我上面指定的方式查询数据的方法提出建议。TIA。
解决方案
开始吧,
这是你的孩子名单List<Widget> children = [];
把你的ListView
孩子改成ListView(children: children, ...)
并像这样更新您的流构建器,
if(!snapshot.hasData) return new Text("Loading...");
initChildren(snapshot); // here is important
return new ListView(...
并且initChildren
是
initChildren(snapshot) async {
final list = await Future.wait(snapshot.data.documents.map((document) async {
String name = '';
String number = '';
var doc = await db.collection("users").document(document["uid"]).get();
doc.then((onValue) {
number = onValue.data['number'];
name = onValue.data['name'];
});
return new ListTile(
title: new Text(name),
subtitle: new Text(number),
);
}));
setState(() => children = list);
}
推荐阅读
- c# - c# HttpRequestMessage Authorization 使用 IdentityServer 返回 401
- node.js - 从 Firebase AdminSDK 过滤用户
- c - 程序从文件中查找子字符串的索引
- r - 为给定的概率分布生成随机样本
- performance - 如果需要导入更大的库,是否应该将函数放在单独的文件中?
- php - Laravel 请求类验证嵌套的 json
- c# - 如何编写一个接收 int 参数并将它们组合打印出来的函数?例如:1,2,3,4 -> 1234
- tkinter - 选择文件时使用文件对话框额外(错误)单击鼠标
- c# - EF 核心异常 System.ArgumentException:Argument types do not match System.Linq.Expressions.Expression.Condition(Expression test, Expression ....)
- javascript - 在使用 Javascript 上传之前更改音频文件的比特率