首页 > 解决方案 > 如何以相反的顺序获取消息序列

问题描述

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

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: []
          );
        }
      },
    );

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

图片在哪里收藏有快照在此处输入图片描述t。

标签: firebasefluttergoogle-cloud-firestorestream

解决方案


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

  • 直接上榜。

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

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

您可以摆脱其中的一个,ListView只需反转列表本身。


推荐阅读