【问题标题】:How to get the sequence of messages in reverse order如何以相反的顺序获取消息序列
【发布时间】:2021-10-13 06:53:51
【问题描述】:

enter image description here我正在尝试制作一个聊天应用程序,根据视频讲座,我已将反向添加到我获取快照的列表中,但它没有反映在应用程序中。我附上代码。请提供帮助,如果需要,我将非常乐意提供任何澄清。

StreamBuilder<QuerySnapshot>(
      stream: _firestore.collection('messages').snapshots(),
      builder: (context,snapshot){
        if(snapshot.hasData) {
          final messages = snapshot.data.docs.reversed;
          List<MessageBubble> messageBubbles=[];
          for(var message in messages)
          {
            final messageText=message.get('text');
            final messageSender=message.get('sender');
            final currentUser= loggedInUser.email;
            final messageBubble=
            MessageBubble(sender:messageSender,
                text:messageText,
                 isMe:currentUser==messageSender);
            messageBubbles.add(messageBubble);
     
          }
          return Expanded(
            flex:8,
            child: ListView(
              reverse:true,
                padding:EdgeInsets.symmetric(horizontal:10,vertical:20),
                children: messageBubbles
            ),
          );
        }
        else {
          return Column(
              children: []
          );
        }
      },
    );

这张图片显示我发送的最后一条消息是“你好,我是第一次发短信”,它既不在先前消息的顶部,也不在底部,而是随机介于两者之间。我希望它始终位于底部,并且还希望默认情况下屏幕始终保持在底部,直到用户向上滚动为止。

图哪里收藏有snapshoenter image description heret.

【问题讨论】:

    标签: firebase flutter google-cloud-firestore stream


    【解决方案1】:

    您在两个地方颠倒了列表:

    • 直接上单。

      final messages = snapshot.data.docs.reversed;
      
    • ListView

      ListView(
        reverse:true,
        padding:EdgeInsets.symmetric(horizontal:10,vertical:20),
        children: messageBubbles
      ),
      

    您可以去掉ListView 中的那个,而只是反转列表本身。

    【讨论】:

    • 在列表视图中,我使用反向始终直接停留在屏幕底部并直接显示在列表中,以便我的列表按照视频中的说明进行反向。
    • 进一步以随机顺序添加项目我想要任何普通消息应用程序一样的东西
    • “随机顺序”和“像任何普通的消息应用程序一样”到底是什么意思?您希望它按字母顺序还是按时间戳排序?
    • 另外,这将有助于发布消息集合的结构。
    • 随机顺序意味着当我发短信时,它会出现在消息列表中的任何位置,既不在顶部也不在底部,而是介于两者之间。 “像普通消息应用程序一样”是指消息应按时间戳排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2012-11-29
    • 2015-05-20
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多