扑动火球的相似和不同特征



我正试图使用Firebase在flutter上构建一个类似的功能。我能够使用交易存储点赞和删除点赞。我的问题是,我如何才能在前端代表类似的状态?

(_isLiked == false)
? IconButton(
iconSize: Sizes.s35,
color: Colors.black,
icon: Icon(Icons.favorite_outline),
onPressed: () {
setState(() {
_isLiked = true;
final like = LikeData(
campaingID: donation.campaignID,
dateTime: Timestamp.now(),
userId: user.uid,
likeId: DateTime.now().toString(),
like: _isLiked,
);
likeService.newLike(donation, like);
});
},
)
: IconButton(
iconSize: Sizes.s35,
color: Colors.green,
icon: Icon(Icons.favorite),
onPressed: () {
setState(() {
likeService.deleteLike(donation, user);
});
},
),

这就是我现在将其表示为硬编码的_isliked布尔值的方式。如何从Firebase调用状态?

您可能需要添加一个StreamBuilder来监听点赞/取消点赞中的实时更改,我已经为您介绍了以下解决方案。

Widget likeWidget(String postId) {
return Column(
children: [
SizedBox(
height: Get.height * 0.022,
width: Get.width * .15,
child: StreamBuilder(
stream: FBCollections.postLikes
.where("post_id", isEqualTo: postId)
.where("user_id", isEqualTo: userData.userEmail)
.snapshots(),
builder:
(context, AsyncSnapshot<QuerySnapshot> snapshotCheckLike) {
if (!snapshotCheckLike.hasData) {
return Container();
} else {
return snapshotCheckLike.data.docs.isEmpty
? IconButton(
icon: Icon(Icons.favorite_outline),
onPressed: () {
final like = LikeData(
campaingID: donation.campaignID,
dateTime: Timestamp.now(),
userId: user.uid,
likeId: DateTime.now().toString(),
like: true,
);
likeService.newLike(donation, like);
},
)
: IconButton(
iconSize: Sizes.s35,
color: Colors.green,
icon: Icon(Icons.favorite),
onPressed: () {
setState(() {
likeService.deleteLike(donation, user);
});
},
);
}
}),
),
],
);

}

最新更新