使用Getx程序包进行状态管理并从Cloud Firestore获取数据。我正在使用Getbuilder更改状态。当我按下此图标时,我有一个类似的图标,当前用户的ID存储在数据库的列表中,并即时检查该列表是否包含当前用户的ID,然后即时切换颜色。一切正常,无需更改颜色。 帮助我如何更改不喜欢的图标的颜色。
这是我的图标代码:
class ArticleOptions extends StatelessWidget {
final DocumentSnapshot articles;
ArticleOptions({this.articles});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(top: 15, right: 30, left: 30, bottom: 15),
child: GetBuilder<ArticlesController>(
init: ArticlesController(),
builder: (controller) {
return Row(
children: [
InkWell(
onTap: () {
controller.likeArticle(controller.currentUser.uid, articles.data()['id']);
},
child: Row(
children: [
Text(
controller.article.data()['likes'].length.toString(),
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
color: CustomColors.blackColor,
),
),
SizedBox(
width: 5,
),
SvgPicture.asset(
'assets/Heart.svg',
height: 22,
color: articles
.data()['likes']
.contains(controller.currentUser.uid)
? Colors.pink
: Colors.grey.withOpacity(0.7),
),
],
),
),
],
);
},
),
);
}
}
这是我喜欢文章的方法:
Future<void> likeArticle(String userId, String articleId) async {
DocumentSnapshot doc = await _articlesCollection.doc(articleId).get();
if (doc.data()['likes'].contains(userId)) {
await _articlesCollection.doc(articleId).update({
'likes': FieldValue.arrayRemove([userId])
});
} else {
await _articlesCollection.doc(articleId).update({
'likes': FieldValue.arrayUnion([userId])
});
update();
}
}