firebase - Flutter Firebase 中的喜欢和不喜欢的功能
问题描述
我正在尝试使用 Firebase 在颤振上构建类似的功能。我能够使用事务存储和删除类似的东西。我坚持的是,我怎样才能在前端表示类似的状态?
(_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);
});
},
);
}
}),
),
],
);
}
推荐阅读
- ios - 捏手势后如何将UIView动画化回原始帧
- python - 在熊猫数据框上应用以字符串格式存储的过滤器
- c++ - 命令“new”和“malloc”没有正确分配内存
- jenkins - 当电子邮件 ID 正确时,发送到以下有效地址 Jenkins 时出错?
- php - laravel 为现有数据库设置模型
- html - 创建简单的 html 电子邮件需要哪些 html 标签?
- sql - 如何使用单个查询从一个表中获得基于两个不同条件的多个结果
- django - DRF - 通过 url 更改文件字段
- python - 在任务中运行组时芹菜运行线程卡住
- java - 添加到工作项目后,谷歌地图未显示