firebase - 用于列表构建的Flutter中的Firestore嵌套查询

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

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

最佳答案

开始吧,

这是您的 child 列表List<Widget> children = [];
将您的ListView子代更改为ListView(children: children, ...)
然后像这样更新您的streambuilder,

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);
}

关于firebase - 用于列表构建的Flutter中的Firestore嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58248465/

相关文章:

java - 当应用程序处于后台或被终止时,如何启动我的应用程序或收到通知的 Activity ?

java - FirebaseRecyclerAdapter DatabaseException : Can't convert object of type java. lang.String 输入帖子

dart - 如何在 dart2js 之后从 Javascript 调用 dart 方法

flutter - 在 BottomNavigationBarType.fixed 中设置事件项目的颜色

javascript - 如何在一段时间后取消 RXJS 订阅

javascript - 通过 Angular 在 firebase 中使用自定义标题而不是 ID 创建新项目

flutter - 将 Flutter 小部件变换/平移到其宽度的负 50%

dart - 如何在 Flutter 应用程序启动时设置数据库?

dart - 我正在将dio库用于http响应,但未更新listview抖动

firebase - Firestore 查询中的 Flutter 传递文档 ID