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

鸿蒙开发: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}})

相关总结

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

相关文章:

  • htmlUnit和Selenium的区别以及使用BrowserMobProxy捕获网络请求
  • 住宅IP的深度解析与合理运用
  • 聊聊Spring AI autoconfigure模块的拆分
  • 在线工具源码_字典查询_汉语词典_成语查询_择吉黄历等255个工具数百万数据 养站神器,安装教程
  • DeepSeek“智”造:解锁旅游行业新玩法
  • stm32F103芯片 实现PID算法控制温度例程
  • AI文旅|暴雨打造旅游新体验
  • PostgreSQL技术内幕30:Heap Only Tuple(HOT)原理解析
  • 五一旅游潮涌:数字化如何驱动智慧旅游升级
  • HiklQQBot开源程序基于python的轻量qq官方机器人框架 快速部署启动官方QQ机器人 插件编写简单易懂 支持小白AI一键生成插件
  • 乌班图安装docker
  • XML Forms Data Format (XFDF) 工作原理、数据结构、使用场景以及与缓冲区的交互方式
  • FPGA实战项目2———多协议通信控制器
  • UG471 之 SelectIO 逻辑资源
  • 高频微服务面试题总结
  • 19、HashTable(哈希)、位图的实现和布隆过滤器的介绍
  • 【Go底层】http标准库服务端实现原理
  • A* (AStar) 寻路
  • MySQL 的事务(Transaction)
  • 使用pyTorch 自然语言处理(NLP)知识库创建
  • 网络主播直播泄机密,别让这些“小事”成威胁国家安全的“突破口”
  • 人民财评:网售“婴儿高跟鞋”?不能让畸形审美侵蚀孩子身心
  • 代理销售保险存在误导行为,农业银行重庆市分行相关负责人被罚款0.1万元
  • 丰田汽车:美国关税或导致4、5月损失1800亿日元,新财年净利润下滑三成
  • 再有20余篇论文出现“妇科男患者”“前列腺女患者”,如何破除“水论文”灰产链?
  • 诺和诺德一季度减重版司美格鲁肽收入增83%,美国市场竞争激烈下调全年业绩预期