首页 > 其他分享 >鸿蒙开发融云demo消息未读数

鸿蒙开发融云demo消息未读数

时间:2024-10-25 09:46:57浏览次数:9  
标签:index 读数 layout 鸿蒙 color demo app 融云 integer

鸿蒙开发融云demo消息未读数

跟着我一步步搭建带界面的融云demo,这次是要显示未读数,未读数有两个,一个是消息列表的未读数,一个是主页消息tab上的未读数。

一、消息列表的未读数

先看下效果图:

在这里插入图片描述
关键代码如下:

if (this.chatItem.unreadMessageCount > 0 || this.customUnReadCount > 0) { // 红点消息大于0条时渲染红点
        Row() {
          Text(this.chatItem.unreadMessageCount > 0?`${this.chatItem.unreadMessageCount}`:`${this.customUnReadCount}`)
            .borderRadius($r('app.integer.layout_8'))
            .constraintSize({minWidth: $r('app.integer.opt_layout_chat_view_red_dot_width')})
            .height($r('app.integer.opt_layout_chat_view_red_dot_height'))
            .backgroundColor($r('app.color.color_red'))
            .fontSize($r('app.integer.text_font_10'))
            .textAlign(TextAlign.Center)
            .fontColor(Color.White)
        }
        .alignItems(VerticalAlign.Center)
        .justifyContent(FlexAlign.Center)
        .borderRadius($r('app.integer.layout_10'))
        .margin({ top: $r('app.integer.layout_minus_8'), left: $r('app.integer.layout_24') })
        .constraintSize({minWidth: $r('app.integer.opt_layout_chat_view_red_dot_container_width')})
        .height($r('app.integer.opt_layout_chat_view_red_dot_container_height'))
        .backgroundColor(Color.White)
        .alignRules({
          top: { anchor: '__container__', align: VerticalAlign.Top },
          left: { anchor: '__container__', align: HorizontalAlign.Start }
        })
        .opacity((this.chatItem.unreadMessageCount > 0 || this.customUnReadCount > 0) ? 1 : 0)
        .id('badge')
      }
二、主页消息tab的未读数:

先看下效果图:
在这里插入图片描述
关键代码如下:

public static getPrivateUnReadCount(unreadCountCallback: (unreadCount: number) => void) {
    let unreadCount = 0
    let conTypeList = new List<ConversationType>();
    conTypeList.add(ConversationType.Private);

    let isContainBlocked = false;

    IMEngine.getInstance().getUnreadCountByTypes(conTypeList, isContainBlocked)
      .then(result => {
        if (EngineError.Success !== result.code) {
          // 获取未读数失败
          return;
        }
        if (!result.data) {
          // 未读数为 null

          return;
        }
        unreadCount = result.data as number;
        unreadCountCallback(unreadCount )

      });
  }
@Builder
  TabBottom(item: TabItem, index: number) {
    Column() {
      // 发现在TabBottom传值改变不了,就用要显示未读数加上位置判断,用if else显示组件,这样不用算badge的size
      // 规则:字符串’-1‘代表的是红点,其他字符串数字为数字红点
      if ((isNotEmptyString(this.unreadNumHome) && index === 0) ||
        (isNotEmptyString(this.unreadNumMsg) && index === 1) ||
        (isNotEmptyString(this.unreadNumMine) && index === 2)) {
        Badge({
          value: index === 0 ? (this.unreadNumHome === '-1' ? '' : this.unreadNumHome) :
                 index === 1 ? (this.unreadNumMsg === '-1' ? '' : this.unreadNumMsg) :
              (this.unreadNumMine === '-1' ? '' : this.unreadNumMine), // 设置 badge 的显示文本
          position: BadgePosition.RightTop, // 设置 badge 显示在右上角
          style: index === 0 || index === 1 ? { badgeColor: $r('app.color.color_red') } :
            { badgeSize: 9, badgeColor: $r('app.color.color_red') }// 设置 badge 的显示样式,首页和消息不用限制大小,让它自适应
        }) {
          Column() {
            Image(this.selectedIndex === index ? item.imageActivated : item.imageOriginal)
              .height($r('app.float.tab_image_size'))
              .width($r('app.float.tab_image_size'))
          }
          .padding({ left: 10, right: 10, })
        }
        .margin({ top: 5, bottom: 5 })
      } else {
        Column() {
          Image(this.selectedIndex === index ? item.imageActivated : item.imageOriginal)
            .height($r('app.float.tab_image_size'))
            .width($r('app.float.tab_image_size'))
        }
        .padding({ left: 10, right: 10, })
        .margin({ top: 5, bottom: 5 })
      }

      Text(item.title)
        .fontSize($r('app.float.tab_text_font_size'))
        .fontWeight(500)
        .fontColor(this.selectedIndex === index ? $r('app.color.color_main') : Color.White)
        .textAlign(TextAlign.Center)
        .margin({
          bottom: $r('app.float.tab_text_margin_bottom')
        })

    }
    .justifyContent(FlexAlign.Center)
    .height('100%')
    .width('100%')
    .backgroundColor($r("app.color.color_black"))
    .onClick(() => {
      this.selectedIndex = index
    })
  }
整个鸿蒙融云demo项目结构图:

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

标签:index,读数,layout,鸿蒙,color,demo,app,融云,integer
From: https://blog.csdn.net/u010074743/article/details/143200472

相关文章

  • 鸿蒙开发初探
    目录引言一、鸿蒙操作系统概述1.微内核架构2.多设备协同二、鸿蒙开发环境搭建1.安装DevEcoStudio2.创建项目3.开发与调试三、鸿蒙应用的开发1.UI设计2.业务逻辑3.分布式能力四、鸿蒙的应用场景1.智能家居2.健康监测3.智能出行五、总结引言 ......
  • 鸿蒙Next数据同步艺术:分布式数据对象的创建与管理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言在多设备协同的智能生态中,华为鸿蒙......
  • 鸿蒙Next数据同步艺术:常见数据类型处理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言在华为鸿蒙HarmonyOSNext中,标准化......
  • 鸿蒙开发融云Demo消息列表
    鸿蒙开发融云IMKit消息列表融云鸿蒙版是不带UI的,得自己一步步搭建。融云后期好像也不会出带UI的库,还是早点自己弄吧一、思路:IMEngine.getInstance().getConversationListByPage获取二、效果图:三、关键代码:获取列表数据:publicstaticloadConversationList(conversat......
  • 华为鸿蒙HarmonyOS第一课-学习笔记总结
    华为鸿蒙HarmonyOS第一课-学习笔记总结一、概述目前华为开发者联盟下属的HarmonyOS官网推出了,针对HarmonyOS应用开发的学习视频。总共13课程,干货满满。每节课程后会有练习题,分数达成后会有结课证书。最终所有课程都学习后,可以去考试,获取HarmonyOS基础开发者证书。华为官方学习课程......
  • 超千款鸿蒙原生游戏上架,华为游戏中心成就非凡游戏体验
    10月22日,原生鸿蒙之夜暨华为全场景新品发布会在深圳举行,华为正式为用户带来全新的原生鸿蒙操作系统(HarmonyOSNEXT),这是HarmonyOS诞生以来最大的更新。发布会公布了当前HarmonyOSNEXT整体应用生态的进展,其中鸿蒙游戏领域令人瞩目。以《王者荣耀》、《和平精英》、《归龙潮》、《万......
  • 第一个Java spring boot demo运行
     一、环境准备1,下载JavaJDK需要安装两个JDK版本:1.8/17安装ZuluJDK(不能使用OracleJDK)JDK17:https://www.azul.com/downloads/?version=java-17-lts&os=macos&package=jdk#zuluJDK8:https://www.azul.com/downloads/?version=java-8-lts&os=macos&package=jdk#zul......
  • 一个简单的登录界面demo
    代码基于ttkbootstrap fromtkinterimport*importttkbootstrapasttkfromtkinterimportmessageboxclassTextView(ttk.Frame):def__init__(self,master):super().__init__(master,padding=30)self.pack(fill=BOTH,expand=YES)......
  • 华为原生鸿蒙操作系统:我国移动操作系统的新篇章
    华为原生鸿蒙操作系统:我国移动操作系统的新篇章引言在移动操作系统领域,苹果iOS和安卓系统一直占据主导地位。然而,随着华为原生鸿蒙操作系统的正式发布,这一格局正在发生深刻变化。作为继苹果iOS和安卓系统后的全球第三大移动操作系统,鸿蒙系统的出现不仅标志着我国在移动......
  • 鸿蒙Next之数据同步艺术之三:标准化数据类型解析-UTD详解
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。本文将深入探讨华为鸿蒙HarmonyOSNext......