【发布时间】: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