打开聊天Flutter时如何向下滚动聊天列表视图

Posted

技术标签:

【中文标题】打开聊天Flutter时如何向下滚动聊天列表视图【英文标题】:How scroll down chat list view when open the chat Flutter 【发布时间】:2021-05-26 20:18:52 【问题描述】:

我想让我的聊天消息在每次打开某人的聊天时向下滚动。我曾尝试使用 jumpTo(),但没有成功。也许有人知道如何使它工作?提前谢谢!

这里是代码 sn-p

Widget ChatMessageList() 
return StreamBuilder(
  stream: chatMessageStream,
  builder: (context, snapshot) 
    return snapshot.hasData
        ? ListView.builder(
            controller: controller,
            itemCount: snapshot.data.docs.length,
            itemBuilder: (context, index) 
              return MessageTile(
                snapshot.data.docs[index].data()["message"],
                snapshot.data.docs[index].data()["sendBy"] ==
                    Constants.myName,

              );
              controller.jumpTo(controller.position.maxScrollExtent);
            ,
          )
        : Container();,);

【问题讨论】:

这可能会有所帮助***.com/questions/43485529/… 【参考方案1】:

ListView.builder() 有一个名为reverse 的参数。这个默认是false,如果你把它改成true你可能会达到你想要达到的效果。

ListView.builder(
      reverse: true,
);

【讨论】:

谢谢,但以防万一数据需要降序 如果您也想反转您的列表,请致电snapshot.data.docs.reversed,就像下面发布的@matr0s 一样,但很乐意提供帮助【参考方案2】:

如果您的主要目标是首先获取最新消息,您可以使用 Reverse 获取快照

final messages = snapshot.data.docs.reversed;

希望你明白了

【讨论】:

对不起,我没有完全理解。能不能给个链接例子或者解释一下。 我找不到一个快速准确的例子,但我在我的应用程序中做了类似的事情: * 获取必要的数据并放入单独的变量中:List messageBubbles = []; for (var message in messages) final messageText = message.data()['text'];最终 messageSender = message.data()['sender'];最终当前用户 = 登录用户.email; ....... ......... 最终 messageBubble = MessageBubble( 发件人:messageSender,文本:messageText,isMe:currentUser == messageSender,); messageBubbles.add(messageBubble); 不确定是否清楚。一旦有更多时间,我会尝试分享更多数据 MessageBubble - 这是我的自定义小部件,我使用了四个 UI 元素。你实际上可以忽略它,只在你的小部件中显示快照数据(我猜你的情况是 MesageTile)

以上是关于打开聊天Flutter时如何向下滚动聊天列表视图的主要内容,如果未能解决你的问题,请参考以下文章

如何自动向下滚动 - 与 django 聊天应用程序

Flutter - 在列表中添加新项目时保持滚动位置

更新列表视图时如何保持滚动

在设定的时间向下滚动聊天,但在用户交互时停用

自动向下滚动聊天 div

RecyclerView未正确显示消息列表