当前位置: 首页 > ds >正文

鸿蒙开发:dialog库做了一些优化

前言

本文基于Api13

dialog库是我去年5月份开发了一个便捷弹窗库,主打一个使用简单,一经推出,在dialog领域下载量稳居在前,可以说是非常受欢迎的;但是,之前的版本仍然有着可优化的空间,比如弹窗内容不支持动态更新,时间弹窗数据是循环遍历,造成了数据加载慢,还有弹窗无法根据标识隐藏等等,这些问题的存在,导致了在特定场景下无法满足的情况,不得不促使着自己进行优化更新。

除了代码上的优化之外,针对功能和文档也做了同步更新,目前把dialog拆分了八大功能模块,几乎涵盖各个业务需求,分别是:1、自定义形式,2、时间弹窗,3、城市选择,4、确认&信息,5、底部列表&网格,6、toast,7、popup形式,8、loading形式

中心仓库地址如下,目前版本为1.2.0,本文不在赘述使用方式,只介绍优化项,大家如果想看使用方式,直接查看中心仓库地址即可:

https://ohpm.openharmony.cn/#/cn/detail/@abner%2Fdialog

支持的功能很多,无法做到一一截图,主要的功能效果如下,有一点需要说的是,所有的弹窗样式均可以通过全局初始化统一设置,或者在调用的时候进行单独设置。

首先是常见的信息确认形式,支持单双按钮,并且支持message自定义组件形式,最新的版本也已经支持数据的动态更新。

底部列表形式,支持常见的单列表,网格,列表滚动选择等形式,并且默认支持动画从底部弹出,适用于场景的性别选择,分享,条件选择等场景。

时间选择器,这一版,优化比较大,舍弃了之前的数据遍历,改为了单组件获取,这样大大提高了数据的加载速度。

内置了城市地址选择,如果不满足需求,您可以通过底部列表样式,自己来实现。

toast和系统不一样的是,可以自行设置圆角和背景,以及设置自己的icon图标。

具体使用,之前也有写过,并且中心仓库以及Gihub中也有文档说明,这里不在赘述了,简单说下本次优化的几个问题。

优化一、内容支持更新

之前的版本中,弹窗的内容默认传递什么就是什么,无法在弹窗弹出后进行动态更新,虽然大部分的场景下不需要更新,但是在一些特殊的场景下,这样的效果也是存在的,为了满足这部分需求,1.2.0针对这个问题做了统一的处理。

信息弹窗形式更新

参数为ContentAttribute,支持标题,描述信息,按钮,以及相关样式等全部的属性更新。

updateDialogInfo()

比如信息弹窗弹出后,我需要更新标题和描述信息,可以如下代码操作:

updateDialogInfo({title:"我更新了标题",message:"我更新了描述"})

确认弹窗形式更新

和信息弹窗除了更新方法不一样之外,参数是一模一样的。

updateDialogConfirm()

比如弹窗弹出后,我需要更新标题和描述信息,可以如下代码操作,当然了,你也可以更新其他的属性,比如按钮的内容,弹窗的样式等。

updateDialogConfirm({title:"我更新了标题",message:"我更新了描述"})

自定义弹窗形式更新

参数是Object,和弹出自定义弹窗传递的数据类型一样。

updateDialogParams()

popup弹窗数据更新

参数是Object,和传递的数据类型一样。

updatePopupData()

优化二、时间弹窗数据优化

由于系统的组件无法满足UI的样式,针对时间弹窗做了一层封装,系统虽然提供了可供选择的滚动组件TextPicker,但是所有的数据都需要自己来设置;因为时间格式的不同,比如年月日时分秒,年月日时分等,所展示的列也是不同的,上一版,由于需要联动的机制,采取了数据循环遍历,非常的耗时,比如年月日时分秒,需要遍历起始年,然后对每一年再遍历月,一层层往下走,非常的不便。

这一版,不在嵌套遍历,而是单独的执行遍历,年是年,月是月,日是日,时是时,分是分,秒是秒,只是在滚动单独列的时候,再去初始化数据和执行联动机制,极大的缩短了数据加载的时间。

使用方式上和之前保持不变,通过timeType字段区分时间展示类型。

showDialogTime({titleBarAttribute: {titleText: "年月日-弹窗",},timeAttribute: {timeType: TimeDialogType.YMD,startTime: "2024-10-24",selectTime: "2024-12-24",endTime: "2029-12-10",},timeConfirmClick: (date) => {//时间回调console.log("===时间结果:" + date)},confirmClick: (value, index) => {//内容和索引回调console.log("===内容结果:" + value + "====" + index)}})

优化三、支持多种隐藏模式

之前的版本只支持单一的顶层隐藏模式,也就是从上到下逐一隐藏,但是在有些特殊的场景的,dialog弹出顺序不一样,隐藏顺序也不一样,比如,我弹出了三个弹窗,我要先隐藏第二个,再隐藏第三个和第一个,之前的版本就无法实现,为了解决这个问题,这个版本,增加可以按照索引顺序隐藏和按照指定id隐藏的模式。

按照位置索引隐藏

适用于多个弹窗的情况下,只需要传递索引即可,比如弹出了三个弹窗,想隐藏第二个,就可以传索引1。

hidePosition(1)

按照指定id进行隐藏

也仅适用于多弹窗的情况下,和位置索引不同的是,你不需要考虑弹窗的弹出顺序,只需要标记弹窗的id,隐藏的时候直接传id即可。

使用id隐藏需要在弹出弹窗时进行设置id,可以通过dialogAttribute中的dialogId属性进行设置:

dialogAttribute:{dialogId:"dialogInfo1",
}

隐藏时直接隐藏对应的id即可。

hideDialogId("dialogInfo1")

优化四、toast和loading单独封装

之前toast和loading是和普通的弹窗绑定在一起的,由于toast和loading的使用频率很大,索性就单独抽取封装了,防止在使用的时候,造成不必要的问题。

优化五、message内容支持自定义组件

之前的message内容都是字符串形式的,为了兼顾到多样的需求,本次版本支持大家传递自定义组件形式,同样也支持动态数据的传递,支持确认取消形式和信息弹窗形式。

showDialogConfirm({title: "我是标题",messageView: wrapBuilder(MessageView), //传递自定义视图messageData: new TextBean("我是自定义的message视图", true), //传递自定义数据,可以是任意的类型clickConfirm: () => {//确认hide() //隐藏dialog}})

相关总结

当然了,目前仍然有很多可优化的项,比如时间弹窗中的跨步选择,跨月日期等等,在后续的时间安排中,也会着重的去解决这个问题,也希望友友们在使用的过程中能够踊跃的发现问题和提出问题,感谢大家。

http://www.xdnf.cn/news/5124.html

相关文章:

  • daytona开源代码架构分析
  • CMD常见命令
  • Oracle非归档模式遇到文件损坏怎么办?
  • 力扣:轮转数组
  • WD5030L CC/CV模式DCDC15A高效同步转换器消费电子工业控制汽车电子优选择
  • 命名视图~
  • NOIP1999提高组.拦截导弹
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据排序操作
  • React 第三十八节 Router 中useRoutes 的使用详解及注意事项
  • OpenHarmony SystemUI开发——修改状态栏和导航栏的高度
  • Mamba 状态空间模型 笔记 llm框架 一维卷积
  • Android设备序列号获取方式全解析
  • 使用pyTorch 自然语言处理(NLP)知识库创建
  • 青少年编程与数学 02-019 Rust 编程基础 03课题、变量与可变性
  • Java中医门诊系统源码 中医诊所系统源码
  • Jenkins Maven 带权限 搭建方案2025
  • 什么是移动设备管理(MDM)
  • el-menu 折叠后小箭头不会消失
  • AKS 支持 Kata Container容器沙盒 -预览阶段
  • 峰与谷系列题
  • 深入解析多线程与多进程:从理论到Python实践
  • 【LLaMA-Factory】使用LoRa微调训练DeepSeek-R1-Distill-Qwen-7B
  • 深入解析WPF中的3D图形编程:材质与光照
  • 关于fastjson与fastjson2中toJava操作的区别
  • SD二轮省集总结
  • Docker的基础操作
  • Nacos源码—7.Nacos升级gRPC分析四
  • GitHub 趋势日报 (2025年05月08日)
  • C++:书架
  • Windows Server 2025开启GPU分区(GPU-P)部署DoraCloud云桌面