鸿蒙开发融云demo长按消息

158 阅读1分钟
鸿蒙开发融云demo长按消息

融云鸿蒙版是不带UI的,得自己一步步搭建。 这次讲如何长按消息,出现选择菜单。 这没什么难度。

一、思路:

用bindContextMenu

二、效果图:

在这里插入图片描述

三、关键代码:
@Builder
  MessageContextMenuBuilder() {
    Menu() {
      ForEach(this.messageContextMenus(), (menuItem: MessageContextMenuItem) => {
        MenuItem({ content: menuItem.title })
          .onClick(menuItem.action)

      }, (menuItem: MessageContextMenuItem) => menuItem.title)
    }
  }
// 长按消息的菜单
  messageContextMenus = () => {
    let menus: MessageContextMenuItem[] = [
      {
        title: '复制',
        tag: 'copy',
        action: () => {
          let pasteData: pasteboard.PasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, (this.msg.content as TextMessage).content)
          let systemPasteboard: pasteboard.SystemPasteboard = pasteboard.getSystemPasteboard();
          systemPasteboard.setData(pasteData)
        },
        filter: () => {
          return this.msg.objectName === TextMessageObjectName
        }
      },
      {
        title: '删除',
        tag: 'delete',
        action: () => {
          // android是本地和远端消息都删除的
          let conId = new ConversationIdentifier();
          conId.conversationType = this.msg.conversationType;
          conId.targetId = this.msg.targetId;
          let msgList = new AList<Message>();
          msgList.add(this.msg);

          IMEngine.getInstance().deleteRemoteMessages(conId, msgList, true).then(result => {
            if (EngineError.Success !== result.code) {
              // 删除远端消息失败
              return;
            }
            // 删除远端消息成功
            this.delCallback?.(this.index)
          })
        }
      },
      {
        // android也没有撤回功能,先不做
        title: '撤回',
        tag: 'recall',
        action: () => {

        },
        filter: ()=>{
          return false
        }
      },

    ]

    // do filter
    return menus.filter(item =>!item.filter || item.filter())
  }

在你要长按的组件上加上

.bindContextMenu(this.MessageContextMenuBuilder, ResponseType.LongPress)
整个鸿蒙融云Demo源码结构图:

在这里插入图片描述
有问题或者需要完整源码demo的可以看简介联系我,也可以私信我,我每天都看私信的