【发布时间】:2022-01-01 22:11:56
【问题描述】:
我有一个名为 Stuff 的集合,其中包含一个标题。将其视为 Twitter 帖子。
{
'stuffID': string
'title': string
'details': string
}
我有一个收藏夹集合,可以保存谁喜欢哪个帖子。一个用户可以收藏多个内容。
{
'userID': string
'stuffID': string
}
从第二个集合中,我想获取当前用户最喜欢的所有 stuffID。我想用这些从第一次收集中获取其余信息。总之,我想列出所有用户最喜欢的东西。就像一个书签列表。
我认为我必须使用两个 StreamBuilder 来实现这一点。但我无法让它工作。
这是我设法做的:
@override
Widget build(BuildContext context) {
final FirebaseAuth auth = FirebaseAuth.instance;
final User? user = auth.currentUser;
final userID = user!.uid;
var resultStream = FirebaseFirestore.instance
.collection('favorites')
.where("userID", whereIn: [userID]).snapshots();
return StreamBuilder<QuerySnapshot>(
stream: resultStream,
builder:
(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot1) {
if (snapshot1.hasError) {
return Text('Something is wrong.');
}
if (snapshot1.connectionState == ConnectionState.waiting) {
return Text("Loading");
}
snapshot1.data!.docs.map((DocumentSnapshot document1) {
Map<String, dynamic> data1 =
document1.data()! as Map<String, dynamic>;
print(data1['stuffID']);
Query _stuffStream = FirebaseFirestore.instance
.collection('Stuffs')
.where('stuffID', isEqualTo: data1['stuffID']);
return StreamBuilder<QuerySnapshot>(
stream: _stuffStream.snapshots(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot2) {
if (snapshot2.hasError) {
return Text('Something is wrong.');
}
if (snapshot2.connectionState == ConnectionState.waiting) {
return Text("Loading");
}
return ListView(
//showing the data
children:
snapshot2.data!.docs.map((DocumentSnapshot document) {
Map<String, dynamic> data =
document.data()! as Map<String, dynamic>;
String stuffID = data['stuffID'];
return ListTile(
title: Text(data['title']),
subtitle: Text(data['details']),
);
}).toList(),
);
});
});
return const Center(child: CircularProgressIndicator());
});
}
我尝试了两天,但我所有的尝试都失败了。你能帮忙吗?
【问题讨论】:
标签: flutter dart google-cloud-firestore stream-builder