Firebase 带颤振和火基的向上投票杆

Firebase 带颤振和火基的向上投票杆,firebase,flutter,dart,Firebase,Flutter,Dart,我是一个新手,正在尝试编写我的第一个应用程序,我正在构建一个用户可以上传帖子的功能。 我在《颤栗》中所拥有的只是一个图标按钮,可以在向上投票和联合国投票之间切换。 但是,当我离开帖子并重新进入时,状态(无论我是否已经投了赞成票)将与我最初编码屏幕的方式相同。(它将始终显示为未被升级) 我如何实现用户是否已经对帖子进行了升级投票,并在我输入帖子时保存状态? 此外,我需要一个计数器来计算该职位的得票数 如何编写此代码?谢谢大家! 您需要在单击图标按钮时应用setstate方法您需要在数据库中存储值u

我是一个新手,正在尝试编写我的第一个应用程序,我正在构建一个用户可以上传帖子的功能。 我在《颤栗》中所拥有的只是一个图标按钮,可以在向上投票和联合国投票之间切换。 但是,当我离开帖子并重新进入时,状态(无论我是否已经投了赞成票)将与我最初编码屏幕的方式相同。(它将始终显示为未被升级) 我如何实现用户是否已经对帖子进行了升级投票,并在我输入帖子时保存状态? 此外,我需要一个计数器来计算该职位的得票数


如何编写此代码?谢谢大家!

您需要在单击图标按钮时应用setstate方法您需要在数据库中存储值upvote或downvote,在initstate方法中,首先您必须加载数据,然后设置upvote或downvote的状态,还可以从数据库中计数。

您可以在post类中创建一个映射作为属性,其中字符串是userId,bool是一个标志,指示是向上投票还是向下投票。在你的方法中,你可以这样检查。如果这是你想要的,在这里被否决的也可以被否决

bool isUpVoted;

 handleVotePost(Post post) {
    //check if the userId upVoted or downvoted the post
    isUpVoted = post.votes[userId] == true;
    if (isUpVoted) {
      //Method that update the post with the downvote for the userId
      isUpVoted = false;
      postService.votePost(userId, post, isUpVoted);
      
    } else if (!isUpVoted) {
     //Method that update the post with the upvote for the userId
      isUpVoted = true;
      postService.votePost(userId, post, isUpVoted);

    }
  }

计数器将显示地图的长度。向上投票的正确数量和向下投票的错误数量。

哦,我明白了,非常感谢!我可以问一下,为什么即使我使用了setState()方法,当我离开页面并重新输入时,状态(无论是否更新)没有保存?是因为它必须上传到firebase吗?谢谢大家!@JRAMOS29是的,您需要以某种方式持久化数据。举例来说,它可以在Firebase中,也可以在设备中本地,以便在用户关闭应用程序时不会丢失投票信息(状态)。然后,当用户重新打开应用程序时,您可以实现某种方法从应用程序的数据库中检索有关其投票的信息。setState用于告诉Flatter应用程序状态中当前发生了更改,因此它可以在应用程序运行时根据更改重新生成小部件。当您关闭应用程序并重新打开时,如果未保存小部件/页面,它们将显示初始状态。要在应用程序运行时从一个页面更改为另一个页面时保持您的状态,您可以使用或使用某种状态管理,如Bloc、Mobx、Provider等。但是如果您不保留反映所需状态的数据,当你关闭并重新打开应用程序时,它总是以初始状态启动。没关系。你可以接受我的回答,如果你需要什么帮助你。