首页 > 其他分享 >鸿蒙开发融云demo发送文本消息

鸿蒙开发融云demo发送文本消息

时间:2024-10-26 16:46:21浏览次数:18  
标签:opt layout 鸿蒙 demo app EventKeys 融云 integer view

鸿蒙开发融云demo发送文本消息

融云鸿蒙版是不带UI的,得自己一步步搭建。
这次说如何发送文本消息,并且显示文本消息

一、思路

发送用:IMEngine.getInstance().sendMessage
显示文本:

Text(ImUtils.dealMyTextContent(this.msg.content as TextMessage))
                    .lineHeight($r('app.integer.search_text_height'))
                    .constraintSize({ minHeight: $r('app.integer.opt_layout_chat_view_profile_picture_height') })
                    .fontSize($r('app.integer.search_font_size'))
                    .backgroundColor($r('app.color.color_D0E9F3'))
                    .fontColor($r('app.color.color_182431'))
                    .padding({
                      top: $r('app.integer.layout_8'),
                      left: $r('app.integer.text_font_13'),
                      bottom: $r('app.integer.layout_8'),
                      right: $r('app.integer.text_font_13')
                    })
                    .borderRadius({
                      topLeft: $r('app.integer.opt_layout_chat_view_item_padding_right'),
                      topRight: $r('app.integer.layout_4'),
                      bottomLeft: $r('app.integer.opt_layout_chat_view_item_padding_right'),
                      bottomRight: $r('app.integer.opt_layout_chat_view_item_padding_right')
                    })
二、效果图:

在这里插入图片描述
在这里插入图片描述

三、关键代码:

发送文本消息的封装:

public static sendTextMessage(targetId: string, text: string,extra:string = '', successCallBack?:()=>void) {
    let conId = new ConversationIdentifier();
    conId.conversationType = ConversationType.Private;
    conId.targetId = targetId;

    let textMsg = new TextMessage();
    textMsg.content = text;
    if (isNotEmptyString(extra)) {
      textMsg.extra = extra
    }

    let msgSrc = new Message(conId, textMsg);
    let option: ISendMsgOption = {};
    let msgAfter: Message = msgSrc
    IMEngine.getInstance()
      .sendMessage(msgSrc, option, (msg: Message) => {
        // 消息入库
        msgAfter = msg
        msgAfter.sentStatus = SentStatus.Sending
        EventKeys.postEvent(EventKeys.ReceivedImMessageEvents,ReceivedImMessageEvent(msgAfter))
      })
      .then(result => {
        if (EngineError.Success !== result.code) {
          // 发送消息失败
          msgAfter.sentStatus = SentStatus.Failed
          EventKeys.postEvent(EventKeys.ReceivedImMessageEvents,ReceivedImMessageEvent(msgAfter))
          // 刷新会话列表,不打算自己插入会话
          EventKeys.postEvent(EventKeys.RefreshMsgListEvents)
          return;
        }
        if (!result.data) {
          // 消息数据为空
          // 成功的状态,但是理论上不会出现发送消息成功,但是消息体为空的情况,暂时不处理,避免发送多次通知
          // msgAfter.sentStatus = SentStatus.Sent
          // emitter.emit(EventKeys.RECEIVED_IM_MESSAGE_EVENT, ReceivedImMessageEvent(msgAfter))
          return;
        }
        let msg = result.data as Message;
        EventKeys.postEvent(EventKeys.ReceivedImMessageEvents,ReceivedImMessageEvent(msg))
        // 刷新会话列表,不打算自己插入会话
        EventKeys.postEvent(EventKeys.RefreshMsgListEvents)
        successCallBack?.()
      })

  }

显示文本:

// 聊天页面本人消息
          Row() {
            Image(MMKVUtil.getCurrentUserBean().headImg?.smallHeadImg)
              .width($r('app.integer.opt_layout_chat_view_profile_picture_height'))
              .height($r('app.integer.opt_layout_chat_view_profile_picture_height'))
              .alt($r('app.media.ic_default'))
              .borderRadius($r('app.integer.opt_layout_chat_view_profile_picture_radius'))
              .onClick(()=>{
                // 看我自己的详情
              })
            Column() {
              if (this.msg.objectName === TextMessageObjectName) {
                  Text(ImUtils.dealMyTextContent(this.msg.content as TextMessage))
                    .lineHeight($r('app.integer.search_text_height'))
                    .constraintSize({ minHeight: $r('app.integer.opt_layout_chat_view_profile_picture_height') })
                    .fontSize($r('app.integer.search_font_size'))
                    .backgroundColor($r('app.color.color_D0E9F3'))
                    .fontColor($r('app.color.color_182431'))
                    .padding({
                      top: $r('app.integer.layout_8'),
                      left: $r('app.integer.text_font_13'),
                      bottom: $r('app.integer.layout_8'),
                      right: $r('app.integer.text_font_13')
                    })
                    .borderRadius({
                      topLeft: $r('app.integer.opt_layout_chat_view_item_padding_right'),
                      topRight: $r('app.integer.layout_4'),
                      bottomLeft: $r('app.integer.opt_layout_chat_view_item_padding_right'),
                      bottomRight: $r('app.integer.opt_layout_chat_view_item_padding_right')
                    })
              }
四、鸿蒙融云Demo源码结构图:

在这里插入图片描述
有问题或者需要完整源码的私信我

标签:opt,layout,鸿蒙,demo,app,EventKeys,融云,integer,view
From: https://blog.csdn.net/u010074743/article/details/143234808

相关文章