Firebase 扑动火基中的相似和不相似特征

Firebase 扑动火基中的相似和不相似特征,firebase,flutter,firebase-realtime-database,google-cloud-firestore,Firebase,Flutter,Firebase Realtime Database,Google Cloud Firestore,我正在尝试使用Firebase在Flitter上构建一个类似的功能。我能够使用事务存储like和删除like。我一直坚持的是,我怎样才能在前端表现出类似的状态 (_isLiked == false) ? IconButton( iconSize: Sizes.s35, color: Colors.black, icon: Icon(Icons.favorite_outline), on

我正在尝试使用Firebase在Flitter上构建一个类似的功能。我能够使用事务存储like和删除like。我一直坚持的是,我怎样才能在前端表现出类似的状态

(_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);
              });
            },
          ),

这就是我现在如何将其表示为硬编码的
\u 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);
                        });
                      },
                    );
            }
          }),
    ),
  ],
);
小部件,如Widget(字符串posted){
返回列(
儿童:[
大小盒子(
高度:Get.height*0.022,
宽度:Get.width*.15,
孩子:StreamBuilder(
流:FBCollections.postLikes
。其中(“post_id”,isEqualTo:post id)
.where(“user_id”,isEqualTo:userData.userEmail)
.snapshots(),
建设者:
(上下文,异步快照snapshotCheckLike){
如果(!snapshotCheckLike.hasData){
返回容器();
}否则{
返回snapshotCheckLike.data.docs.isEmpty
?图标按钮(
图标:图标(图标。最喜爱的图标),
已按下:(){
最终相似=相似数据(
campaingID:generation.campaignID,
dateTime:Timestamp.now(),
userId:user.uid,
likeId:DateTime.now().toString(),
比如:真的,
);
likeService.newLike(捐赠,like);
},
)
:图标按钮(
iconSize:size.s35,
颜色:颜色。绿色,
图标:图标(Icons.favorite),
已按下:(){
设置状态(){
likeService.deleteLike(捐赠,用户);
});
},
);
}
}),
),
],
);
}