【问题标题】:Unable to fetch data from firestore database using flutter无法使用颤振从 Firestore 数据库中获取数据
【发布时间】:2021-09-05 15:28:53
【问题描述】:

我正在尝试从 Firestore 随机获取一些数据,基本上这种情况有点复杂,我也查看了文档,但无法找到解决方案。所以数据库包含一个名为 userData 的集合,这个集合存储了几个文档,这些文档是用户的 UID,最后每个文档都包含一个名为 craft 的集合,最后这个 Craft 集合包含名称和其他字段等详细信息。

我试图保留这些数据,如下所示:

Stream: FirebaseFirestore.instance.collection('userData').doc((FirebaseAuth.instance.currentUser!).uid).collection('craft').snapshots(),

通过这种方式,我能够获取与 .doc() 中提供的用户 ID 相关的数据

但现在我想在另一个屏幕上显示相同的数据,但不想获取与特定用户相关的数据,所以我无法弄清楚在 .doc() 中放入什么来获取所有随机记录。

Stream: FirebaseFirestore.instance.collection('userData').doc().collection('craft').snapshots(),

stream builder 和 listview.builder 的完整代码如下。任何帮助将不胜感激 :) 。我对这个问题感到非常沮丧。

  ),
  body: Scaffold(
    body: Stack(
      alignment: Alignment.bottomRight,
      children: [
        StreamBuilder<QuerySnapshot>(
          stream:
          FirebaseFirestore.instance.collection('userData').doc().collection('craft').snapshots(),
          builder: (context, snapshot) {
            if (snapshot.hasError) return Text('Error: ${snapshot.error}');
            if(snapshot.data == null){
              print("No Data");
            };
            switch (snapshot.connectionState) {
              case ConnectionState.none:
                print('none');
                return Center(
                  child: CircularProgressIndicator(
                    valueColor: AlwaysStoppedAnimation<Color>(Colors.deepOrange),
                  ),
                );
              case ConnectionState.waiting:
                print('Waiting');
                return Center(
                    child: CircularProgressIndicator(
                      valueColor: AlwaysStoppedAnimation<Color>(Colors.deepOrange),
                    ));
              case ConnectionState.done:
                print('done');
                return Text('');
            };
            return ListView.builder(
                itemCount: snapshot.data!.docs.length,
                itemBuilder: (BuildContext context, int index) {
                  DocumentSnapshot userData = snapshot.data!.docs[index];
                  return Column(
                    children: <Widget>[
                      SizedBox(height: 20,),
                      Card(
                        elevation: 20,
                        color: Colors.white,
                        shadowColor: Colors.deepOrange,
                        child: Column(
                          children: [
                            ListTile(
                              title: Text(userData['displayName']),
                              leading: Icon(Icons.person),
                              trailing: Icon(Icons.more_vert),
                            ),
                            ListTile(
                              subtitle: Text(userData['craft']),
                            ),
                            Padding(
                              padding: const EdgeInsets.all(20.0),
                              child: Row(
                                children: [
                                  Icon(Icons.thumb_up_alt_outlined),
                                  SizedBox(width: 20,),
                                  Icon(Icons.comment),
                                  SizedBox(width: 20,),
                                  Icon(Icons.share)
                                ],
                              ),
                            ),
                          ],
                        ),
                      ),
                    ],
                  );
                }
            );
          },
        ),
        Padding(
          padding: const EdgeInsets.all(10.0),
          child: FloatingActionButton(onPressed: (){
            if(FirebaseAuth.instance.currentUser != null){
            Navigator.push(context, MaterialPageRoute(builder: (context){
            return UploadPost();
            }));
            }else{
            Navigator.push(context, MaterialPageRoute(builder: (context){
            return LoginScreen();
            }));
            }
          }, backgroundColor: Colors.deepOrange, child: Icon(Icons.edit),),
        ),
      ],
    )
  ),
);

}

【问题讨论】:

  • 你必须做多个查询,第一个:FirebaseFirestore.instance.collection('userData') 然后循环遍历每个文档并查询每个文档
  • 能否分享一段示例代码!

标签: firebase flutter google-cloud-firestore


【解决方案1】:

你可以这样做

FirebaseFirestore.instance
    .collection('users')
    .get()
    .then((QuerySnapshot querySnapshot) {
        querySnapshot.docs.forEach((doc) {
            print(doc["first_name"]);
        });
    });

【讨论】:

  • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
  • 这对我没有帮助?
【解决方案2】:

我以前也这样做过,但在那种情况下,我只有一个带有自动 ID 文档的集合。

我这样定义我的流

Stream: FirebaseFirestore.instance.collection('userData').snapshots();

然后我就是这样在ListView.builder中显示数据

return ListView.builder(
                itemCount: snapshot.data!.docs.length,
                itemBuilder: (BuildContext context, int index) {
                  DocumentSnapshot userData = snapshot.data!.docs[index];
                  return Column(
                    children: <Widget>[
                      SizedBox(height: 20,),
                      Card(
                        elevation: 20,
                        color: Colors.white,
                        shadowColor: Colors.deepOrange,
                        child: Column(
                          children: [
                            ListTile(
                              title: Text(userData['post']),
                              leading: Icon(Icons.person),
                              trailing: Icon(Icons.more_vert),
                            ),
                            ListTile(
                              subtitle: Text(userData['name']),
                            ),
                            Padding(
                              padding: const EdgeInsets.all(20.0),
                              child: Row(
                                children: [
                                  Icon(Icons.thumb_up_alt_outlined),
                                  SizedBox(width: 20,),
                                  Icon(Icons.comment),
                                  SizedBox(width: 20,),
                                  Icon(Icons.share)
                                ],
                              ),
                            ),
                          ],
                        ),
                      ),
                    ],
                  );
                }
            );

现在变化如下图所示

Image 1

Image 2

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 2021-03-04
    • 1970-01-01
    • 2020-07-20
    • 2021-08-15
    • 2018-12-20
    • 2021-08-18
    • 2021-10-01
    • 1970-01-01
    相关资源
    最近更新 更多