我一直在获取一个帖子,在我的Forestore中,我有一个名为likes
的集合,在这个集合中,我存储了所有用户电子邮件的文档。
所以我创建了一个StreamBuilder
:
StreamBuilder(
stream: FirebaseFirestore.instance
.collection("likes")
.doc(FirebaseAuth
.instance.currentUser!.email)
.collection("liked")
.doc(id)
.snapshots(),
builder: (context, snapshot) {
bool liked = false;
if (snapshot.hasData) {
var col = FirebaseFirestore.instance
.collection("likes");
var doc = col.doc(FirebaseAuth
.instance.currentUser!.email);
var col2 = doc.collection("liked");
var doc2 = col2.doc(id).get();
if (doc2 == null) {
liked = false;
} else {
liked = true;
}
}
return Row(
children: [
// Text(snapshot.data.toString()),
IconButton(
onPressed: () {
liked
? FirebaseFirestore.instance
.collection("likes")
.doc(FirebaseAuth.instance
.currentUser!.email)
.delete()
: FirebaseFirestore.instance
.collection("likes")
.doc(FirebaseAuth.instance
.currentUser!.email)
.collection("liked")
.add({"like": true});
},
icon: GradientIcon(
height: height,
width: width,
icon: liked
? CupertinoIcons.heart_fill
: CupertinoIcons.heart,
gradient: const LinearGradient(
begin: Alignment.bottomLeft,
end: Alignment.topRight,
colors: [
Colors.deepPurple,
Colors.deepPurpleAccent
]),
)),
],
);
}),
在上面的代码中,我试图检查用户是否喜欢特定的帖子并相应地更改UI.但我认为关键字exist
已被弃用,因此每当我试图检查文档是否存在时,它总是返回true b/c快照总是有数据.
那么我如何通过使用文档ID来检查文档是否存在呢?
1条答案
按热度按时间gt0wga4j1#
不知何故,你的代码首先将数据加载到一个`StreamBuilder中,但随后又回到数据库中再次加载相同的数据。
而不是使用以下命令从快照中获取数据:
由于您的一些困惑可能来自所涉及的不同类型的快照,我建议您也阅读我对What is the difference between existing types of snapshots in Firebase?的回答。