鴻蒙開發: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.pswp.cn/diannao/82345.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82345.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82345.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows 10 無法啟動或黑屏的修復指南(適用于更新失敗或磁盤故障)

Windows 10 無法啟動或黑屏的修復指南(適用于更新失敗或磁盤故障) 當 Windows 10 突然無法啟動(黑屏、無限重啟、更新失敗后斷電等情況),很可能是由于啟動引導程序損壞或系統映像異常(如系統磁盤出現壞道&…

MCP開發入門

MCP開發入門 官方文檔: https://modelcontextprotocol.io/introduction 入門教程: https://github.com/liaokongVFX/MCP-Chinese-Getting-Started-Guide 本文源代碼:https://github.com/youngqqcn/mcp-server-demo 什么是MCP? 模型上下文協議&#xff…

PX4開始之旅(二)通過自定義 MAVLink 消息與 QGroundControl (QGC) 通信

核心知識點:通過自定義 MAVLink 消息與 QGroundControl (QGC) 通信 1. 通俗易懂的解釋 想象一下,MAVLink 就像是無人機(飛控)和地面站(QGroundControl)之間約定好的一種“語言”。這種語言有很多標準的“…

AI視頻智能分析網關打造社區/工廠/校園/倉庫智慧消防實現精準化安全管控

一、背景 隨著社區、商業場所對消防安全要求日益提升,傳統消防系統已難以滿足智能化、精細化管理需求。智能分析網關融合物聯網與人工智能技術,具備強大的數據處理與分析能力,可全面升級消防系統。將其融入消防系統各層級,搭建智…

深度學習基礎--目標檢測常見算法簡介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)

博主簡介:努力學習的22級本科生一枚 🌟?;探索AI算法,C,go語言的世界;在迷茫中尋找光芒?🌸? 博客主頁:羊小豬~~-CSDN博客 內容簡介:常見目標檢測算法簡介?&#x1f…

傳輸層協議UDP和TCP

傳輸層協議UDP和TCP 1、UDP2、TCP2.1、TCP協議段格式2.2、確認應答(ACK)機制2.3、超時重傳機制2.4、連接管理機制2.5、理解CLOSE_WAIT狀態2.6、理解TIME_WAIT狀態2.7、流量控制2.8、滑動窗口2.9、擁塞控制2.10、延遲應答2.11、捎帶應答2.12、面向字節流2.13、粘包問題2.14、TCP…

PMIC電源管理模塊的PCB設計

目錄 PMU模塊簡介 PMU的PCB設計 PMU模塊簡介 PMIC(電源管理集成電路)是現代電子設備的核心模塊,負責高效協調多路電源的轉換、分配與監控。它通過集成DC-DC降壓/升壓、LDO線性穩壓、電池充電管理、功耗狀態切換等功能,替代傳統分…

Ubuntu 配置網絡接口端點(靜態 IP 地址)詳細教程

在 Ubuntu 系統中,配置網絡接口端點通常指的是為您的有線或無線網卡設置一個固定的 IP 地址、子網掩碼、網關以及 DNS 服務器。這對于服務器或者需要穩定網絡標識的設備來說非常重要。 使用 Netplan (Ubuntu 17.10 及更高版本的默認方式)使用 ifupdown (通過 /etc/…

淺聊大模型-有條件的文本生成

大家好我是木木,自從2022年11月30日OpenAI發布ChatGPT后,大模型迅速火熱起來,人工智能作為當下最火的行業之一,2025年春節期間DeepSeek R1模型大火。LLM中有很多的技術,今天我們聊聊大模型-有條件的文本生成。 什么是…

華為銀河麒麟 V10(ARM)系統軟件部署全攻略:Redis、RabbitMQ、MySQL 等集群搭建指南

一、Redis 集群部署(主從 哨兵模式) 1. 環境準備 系統:華為銀河麒麟 V10(ARM64)節點:3 臺服務器(1 主 2 從 3 哨兵) 2. 安裝包下載 bash # 華為鏡像站 wget https://update.c…

Mysql數據庫進階

一、Mysql組織架構 連接層 1.驗證用戶的身份,用戶名密碼是否匹配 2.提供兩種連接方式(TCP/IP連接、socket連接) 3.連接層提供了一個與sql層交互的線程 SQL層 1.接收連接層傳過來的SQL語句 2.驗證執行的SQL語法 3.驗證SQL的語義(DDL,DML,DQL,DCL) 4.解析器:解析SQL語句,生…

系統思考:短期困境與長期收益

最近在項目中,一直有學員會提到一個議題,如何平衡當前困境和長期收益? 我的思考是在商業和人生的路上,我們常常聽到“魚和熊掌不可兼得”的說法,似乎短期利益和長期目標注定是對立的。但事實上,魚與熊掌是…

Spring Web MVC快速入門

什么是Spring Web MVC Spring Web MVC 是基于 Servlet API 構建的原始 Web 框架,從?開始就包含在 Spring 框架中。它的正式名稱“Spring Web MVC”來?其源模塊的名稱(Spring-webmvc),但它通常被稱為"Spring MVC". View(視圖) 指在應?程序…

DeepSeek基于注意力模型的可控圖像生成

DeepSeek大模型高性能核心技術與多模態融合開發 - 商品搜索 - 京東 圖像的加噪與模型訓練 在擴散模型的訓練過程中,首先需要對輸入的信號進行加噪處理,經典的加噪過程是在圖像進行向量化處理后在其中添加正態分布,而正態分布的值也是與時間…

第十六屆藍橋杯B組第二題

當時在考場的時候這一道題目 無論我是使用JAVA的大數(BIGTHGER)還是賽后 使用PY 都是沒有運行出來 今天也是突發奇想在B站上面搜一搜 看了才知道這也是需要一定的數學思維 通過轉換 設X來把運算式精簡化 避免運行超時 下面則是代碼 public class lanba…

HT71663同步升壓2.7V-13V輸入10A聚能芯半導體禾潤一級代理

在便攜式設備飛速發展的今天,電源轉換效率與產品尺寸始終是行業難以平衡的難題。但現在,HT71663 高功率全集成升壓轉換器強勢登場,一舉打破僵局,為便攜式系統帶來顛覆性的高效小尺寸解決方案!? HT71663 的卓越性能&am…

Unity:輸入系統(Input System)與持續檢測鍵盤按鍵(Input.GetKey)

目錄 Unity 的兩套輸入系統: 🔍 Input.GetKey 詳解 🎯 對比:常用的輸入檢測方法 技術底層原理(簡化版) 示例:角色移動 為什么會被“新輸入系統”替代? Unity 的兩套輸入系統&…

港大今年開源了哪些SLAM算法?

過去的5個月,香港大學 MaRS 實驗室陸續開源了四套面向無人機的在線 SLAM 框架:**FAST-LIVO2 、Point-LIO(grid-map 分支) 、Voxel-SLAM 、Swarm-LIO2 **。這四套框架覆蓋了單機三傳感器融合、高帶寬高速機動、長時間多級地圖優化以…

【質量管理】TRIZ因果鏈分析:解碼質量問題的“多米諾效應“

為什么要使用因果鏈分析 沒有發現問題并不等于沒有問題。愛因斯坦曾說,如果我只有一個小時的時間來拯救世界,我將花45分鐘時間分析問題,10分鐘的時間來檢查問題,最后5分鐘的時間來解決問題。可見問題分析的重要性。 在質量管理實踐…

線程中常用的方法

知識點詳細說明 Java線程的核心方法集中在Thread類和Object類中,以下是新增整合后的常用方法分類解析: 1. 線程生命周期控制 方法作用注意事項start()啟動新線程,JVM調用run()方法多次調用會拋出IllegalThreadStateException(線程狀態不可逆)。run()線程的任務邏輯直接調…