【问题标题】:Firestore Nested Query in Flutter for List Building用于列表构建的 Flutter 中的 Firestore 嵌套查询
【发布时间】:2020-02-03 12:06:19
【问题描述】:

我的 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。

【问题讨论】:

  • then() 回调仅在数据加载后运行,而使用数据库数据的return new ListTile() 会立即运行。我不足以让 Flutter 专家向您展示如何做到这一点,但 this answer 显示了类似的东西(虽然不一样)。

标签: firebase flutter dart google-cloud-firestore stream-builder


【解决方案1】:

开始吧,

这是你的孩子名单List&lt;Widget&gt; 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);
}

【讨论】:

    猜你喜欢
    • 2018-11-26
    • 2021-09-13
    • 2020-08-18
    • 2021-09-29
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多