【问题标题】:Upvoting posts with Flutter and Firebase使用 Flutter 和 Firebase 支持帖子
【发布时间】:2020-06-26 00:39:32
【问题描述】:

我是 Flutter 的新手,我正在尝试编写我的第一个应用程序,我正在构建一个用户可以为帖子投票的功能。 我所拥有的只是一个可以在赞成和不赞成之间切换的图标按钮。 但是,当我离开帖子并重新进入时,状态(无论我是否已经投票)将与我最初对屏幕进行编码的方式相同。 (它总是会出现,因为它没有被投票) 我如何实现用户是否已经对帖子进行了投票并在我输入帖子时保存状态? 另外,我需要一个计数器来计算帖子的票数。

如何编码?谢谢!

【问题讨论】:

    标签: firebase flutter dart


    【解决方案1】:

    您可以在帖子类中创建一个 Map 作为属性,其中 String 是 userId,而 bool 是一个标志,表示是否赞成或反对。在您的方法中,您可以像这样检查。如果你想要的话,这里的 Downvoted 也可以是 Not Voted。

    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 中或设备本地,例如 SharedPreferencesHive 等,以在用户关闭应用程序时不丢失投票信息(状态)。然后,当用户重新打开应用程序时,您可以实现一些方法来从应用程序的数据库中检索有关他的投票信息。
    • setState 用于告诉 Flutter 您的应用程序状态当前发生了变化,因此它可以在应用程序运行时根据这些变化重建您的小部件。当您关闭应用程序并重新打开时,如果您未保存小部件/页面,它们将显示为初始状态。
    • 为了在应用程序运行时从一个页面切换到另一个页面时保持您的状态,您可以使用AutomaticKeepAliveClientMixin 或某种状态管理,如 Bloc、Mobx、Provider 等。但如果您不这样做保留反映您想要的状态的数据,当您关闭并重新打开它时,您的应用程序将始终以初始状态开始。
    • 没关系。如果对您的需要有所帮助,您可以接受我的回答。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-06-28
      • 1970-01-01
      • 2016-06-13
      • 2022-01-03
      • 2020-07-27
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多