信息发不出去显示发送失败


引言

今天我们将深入探讨一个聊天详情页面的实现方法,通过对具体功能的讲解和实际操作,带领大家理解并搭建一个完整的聊天系统。接下来,让我们看看这个页面最终能实现哪些功能。

一、需求概述

我们将搭建一个具有聊天列表功能的页面,并使其支持发送文本消息、实时接收消息以及拉取历史消息等功能。在布局上,对话列表将采用左右排列的方式。

二、技术实现

1. 拉取历史消息

当用户进入聊天详情页面时,首先需要拉取最新的历史消息。我们可以通过设置参数来获取最近一段时间内的消息记录。这里我们默认设置拉取最近一天的数据。具体的代码实现如下:

javascript

let option = {

getType: V2TIMMessageGetType.V2TIM_GET_CLOUD_OLDER_MSG,

userID: this.userId,

count: 15,

// 其他参数设置...

};

V2TIMManager.getMessageManager().getHistoryMessageList(option)

.then((messageList: V2TIMMessage[]) => {

// 处理获取到的消息列表

});

2. 展示聊天列表

获取到历史消息数据后,需要将其展示在聊天列表中。这里我们使用List作为展示控件,并利用鸿蒙原生的LazyForEach进行布局。具体的布局代码如下:

javascript

List({ scroller: this.scroller }) {

LazyForEach(this.messageData, (item: V2TIMMessage, index: number) => {

ListItem() {

this.ItemLayout(item)

}

});

在绘制item的布局页面时,我们需要根据消息体的isSelf字段来判断消息是对方发送的还是自己发送的,从而正确显示对话布局。具体的布局代码如下:

javascript

Row{

Flex({ justifyContent: this.message.isSelf ? FlexAlign.End : FlexAlign.Start, direction: FlexDirection.Row }) {

// 根据消息发送方不同,展示不同的UI布局

}

Text(this.getMessageForType(this.message)) // 显示消息内容

3. 更新实时消息

当对方发送新的消息时,我们需要及时更新到消息列表中。为了实现实时消息的更新,我们需要增加消息回调。具体的实现方法如下:

javascript

advancedMsgListener: V2TIMAdvancedMsgListener = {

onRecvNewMessage: (message: V2TIMMessage) => {

// 当收到新消息时,更新消息列表并滚动到最新消息位置

},

// 其他回调方法...

};

MessageTestInterfaces.addAdvancedMsgListener(this.advancedMsgListener);

4. 发送文本消息

完成消息的展示后,我们需要实现文本消息的发送功能。我们可以调用IM SDK提供的sendC2CTextMessage方法创建并发送文本消息。具体的实现代码如下:

javascript

let sendMessage = V2TIMManager.getMessageManager().createTextMessage(text);

if (sendMessage && sendMessage.status != V2TIMMessageStatus.V2TIM_MSG_STATUS_SENDING) {

// 设置消息的相关属性,如发送方、内容等

// 发送消息

const result = V2TIMManager.getInstance().sendC2CTextMessage(sendMessage);

三、总结与展望

本篇文章通过实际案例详细介绍了搭建一个聊天详情页面的基本实现思路,包括历史消息的获取、实时消息的更新以及文本消息的发送等功能。接下来,我们还可以进一步增加消息撤回、消息删除、发送失败等消息状态的实现,丰富聊天功能。已经掌握这些基础知识的同学们,不妨动手尝试一下,搭建属于自己的聊天系统吧!