首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何合成firestore数据

如何合成firestore数据
EN

Stack Overflow用户
提问于 2021-04-18 18:00:50
回答 1查看 31关注 0票数 0

我想要复合火库数据。哪个小部件对多个数据有用?例如,我有用户数据和用户post数据。我想在同一个Card Widget中显示它们,但它们的快照是不同的。我怎么才能把它们组合起来呢?

我就是这样写的,但它只显示了一个快照,我想同时显示未来构建器和streambuilder快照:

注意:我不能使用用户数据,在下面它有最终的dataUser = snapshotUser.data;但是我不能使用它,它给出了一个错误

代码语言:javascript
复制
class HomePageBodyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) => StreamBuilder<QuerySnapshot>(
      stream: FirebaseFirestore.instance.collectionGroup('Posts').snapshots(),
      builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) {
          return Center(child: CircularProgressIndicator());
        }
        if (snapshot.connectionState == ConnectionState.waiting) {
          return Center(child: CircularProgressIndicator());
        }
        if (!snapshot.hasData) {
          return Center(child: CircularProgressIndicator());
        }
        return ListView(
            children: snapshot.data.docs.map((DocumentSnapshot docPost) {
          return FutureBuilder(
            future: FirebaseFirestore.instance
                .collection('Users')
                .doc(docPost.reference.parent.parent.id)
                .get(),
            builder: (context, snapshotUser) {
              if (!snapshotUser.hasData) {
                return Center(child: CircularProgressIndicator());
              }
              return homePageCard(context, dataPost: docPost, dataUser: snapshotUser.data);
            },
          );
        }).toList());
      });
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-18 21:48:12

我解决了这个问题,就像这样:

代码语言:javascript
复制
class HomePageBodyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) => StreamBuilder<QuerySnapshot>(
      stream: FirebaseFirestore.instance.collectionGroup('Posts').snapshots(),
      builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) {
          return Center(child: CircularProgressIndicator());
        }
        if (snapshot.connectionState == ConnectionState.waiting) {
          return Center(child: CircularProgressIndicator());
        }
        if (!snapshot.hasData) {
          return Center(child: CircularProgressIndicator());
        }
        return ListView.builder(
            itemCount: snapshot.data.docs.length,
            itemBuilder: (context, index) {
              final dataPost = snapshot.data.docs[index];
              return FutureBuilder(
                future: FirebaseFirestore.instance
                    .collection('Users')
                    .doc(dataPost.reference.parent.parent.id)
                    .get(),
                builder: (context, snapshotUser) {
                  final dataUser = snapshotUser.data;
                  if (!snapshotUser.hasData) {
                    return Center(child: CircularProgressIndicator());
                  }
                  return homePageCard(context,
                      dataPost: dataPost, dataUser: dataUser);
                },
              );
            });
      });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67147294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档