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

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

时间:2024-10-26 16:46:21浏览次数:11  
标签: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

相关文章

  • 鸿蒙开发融云demo聊天界面以及加载历史消息
    鸿蒙开发融云demo聊天界面以及加载历史消息跟着我一步步搭建鸿蒙版本融云demo,这次说的是鸿蒙融云聊天界面以及如何加载历史消息先看下效果图:关键代码:@BuilderContentBuilder(){//不用Column,滑动有问题Stack(){this.ListPagingBuilder()i......
  • 鸿蒙基础篇-组件
    “在科技的浪潮中,鸿蒙操作系统宛如一颗璀璨的新星,引领着创新的方向。作为鸿蒙开天组,今天我们将一同踏上鸿蒙基础的探索之旅,为您揭开这一神奇系统的神秘面纱。”各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今天的学习,鸿蒙基础篇-组件首先在鸿蒙开发中,组件(Comp......
  • 鸿蒙编程江湖:ArkTS 容器与原生容器在行为上的差异
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。ArkTS提供了一套容器集,包括Array、Map......
  • 鸿蒙编程江湖:ArkTS开发综合案例与最佳实践
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。简介:构建复杂应用的全方位指南在掌握了......
  • 鸿蒙编程江湖:ArkTS 的多线程与序列化支持
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。提升性能的高级技术在当今的软件开发领......
  • 鸿蒙编程江湖:ArkUI 的声明式 UI 编程与状态管理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。ArkTS的UI编程范式ArkUI是华为鸿蒙......
  • 鸿蒙编程江湖:I/O 密集型任务处理及 ArkTS 的异步锁机制
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。I/O密集型任务是指需要进行大量磁盘读......
  • 鸿蒙案例实践:图像处理应用中多线程任务调度与性能优化
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。1.项目需求与目标分析背景:图像处理......
  • 鸿蒙案例实践:智能家居控制面板的并发任务与UI交互设计
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。1.项目概述与需求分析背景:随着物联网......
  • 鸿蒙NEXT应用上架与分发步骤详解
    大家好,我是V哥。今天的文章来聊一聊HarmonyOSNEXT应用上架。当你开发、调试完HarmonyOS应用/元服务,就可以前往AppGalleryConnect申请上架,华为审核通过后,用户即可在华为应用市场获取您的HarmonyOS应用/元服务。HarmonyOS会通过数字证书与Profile文件等签名信息来保证应用的完......