此问题已存在:
Flutter Firebase: Current user gets data from sub-collection
2天前关闭。
假设一个用户(A)创建一个名为ADS
的集合。User(B)发送对按钮的点击并在user中创建子集合(A)的集合叫做Requests
。它工作正常。现在,用户如何(B)获取用户数据(A)在集合ADS
中。这就像你向一个用户发送好友请求,你想知道你向哪个用户发出了请求。我已经尝试了一些代码,但没有工作。
//code 1 -返回一个红色屏幕的错误,如红色图片所示
Stream<QuerySnapshot<Map<String, dynamic>>> myRide =
FirebaseFirestore.instance.collectionGroup('Requests').snapshots();
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: myRide,
builder: (BuildContext context, AsyncSnapshot snapshot) {
return Center(
child: Text(snapshot.data['Name']),
);
}),
);
}
//代码2也返回代码1中的结果
Stream<QuerySnapshot<Map<String, dynamic>>> myRide =
FirebaseFirestore.instance.collectionGroup('Requests').snapshots();
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: myRide,
builder: (BuildContext context, AsyncSnapshot snapshot) {
return Center(
child: Text(snapshot.data['Name']),
);
}),
);
}
但是,代码3返回一个空白屏幕
Stream<QuerySnapshot<Map<String, dynamic>>> myRide = FirebaseFirestore
.instance
.collection('ADS')
.doc(FirebaseAuth.instance.currentUser!.uid)
.collection('Requests')
.snapshots();
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: myRide,
builder:
(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
final data = snapshot.data!;
return ListView.builder(
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) {
return Card(
child: ListTile(
onTap: () {},
title: Text(data.docs[index].get('Name')),
),
);
});
}),
);
}
有人能帮忙吗?
1条答案
按热度按时间vuv7lop31#
一种方法是将用户
uid
存储在ADS
集合的每个文档中,然后在requests文档中包括发出请求的用户B的uid
和接收请求的用户A的uid
。当您从requests集合中检索文档时,您可以使用用户
uid
通过查询来过滤文档,以获得UserA创建的ADS列表。如果你想澄清,让我知道。
我不熟悉Dart,但检查文档,试试这个: