背景
隨著應用軟件功能的不斷增加,應用程序軟件首頁成為彈窗的重災區(qū),不僅有升級彈窗,還有積分彈窗,簽到,引導等各種彈窗。為了徹底解彈窗問題,本文將使用設計模式解決這個痛點。
設計模式
本方案采用責任鏈設計模式和建造者設計模式,通過將不同的彈窗添加到彈窗處理類,然后按顯示順序。
實現(xiàn)方案
- 先定義基礎彈窗接口 DialogIntercept,統(tǒng)一彈窗的行為。intercept() 方法用于執(zhí)行下一個彈窗。show ()方法用于判斷當前彈窗是否顯示,這里同時支持異步接口請求返回的判斷。
export interface DialogIntercept{
intercept(dialogChain:DialogChain):void
show():boolean |Promise< boolean >
}
- 提供一個彈窗處理類DialogChain,用于處理多個彈窗的執(zhí)行邏輯,將彈窗依次添加到 chainList 中保存,然后執(zhí)行proceed()方法開始顯示彈窗,同時提供一個proceedNext() 方法用于直接跳過當前彈窗,由于代碼較多,此處省略了部分代碼。
/**
* 處理彈窗執(zhí)行
*/
export class DialogChain {
private index: number = 0
private chainList: ArrayList< DialogIntercept > = new ArrayList()
addIntercept(dialogIntercept: DialogIntercept): DialogChain {
if (!this.chainList.has(dialogIntercept)) {
this.chainList.add(dialogIntercept)
}
return this
}
/**
* 不執(zhí)行當前彈窗,可以直接跳過
*/
proceedNext() {
++this.index
this.proceed()
}
/**
* 調用繼續(xù)執(zhí)行下一步
*/
proceed() {
if (this.index >= 0 && this.index < this.chainList.length) {
let dialogIntercept = this.chainList[this.index]
let show = dialogIntercept.show()
if (typeof show === 'boolean' && show) { {
..........
} else if (show instanceof Promise) {
...........
} else {
........
}
} else {
this.index = 0
}
}
}
- 自定義彈窗實現(xiàn)DialogIntercept 接口,通過show()方法的返回值決定當前彈窗是否彈出,如簽到彈窗肯定是每天彈出,可以根據(jù)條件 直接返還 true?;蛘呤嵌Y物彈窗,當接口查詢到還有是否有未領取的禮物來決定彈窗的是否彈出。這里簡單測試一下。
- 分別定義彈窗 DialogA,DialogB,DialogC,實現(xiàn)接口DialogIntercept。
export class DialogA implements DialogIntercept {
uiContext: UIContext
contentNode?: ComponentContent< DialogParams >
promptAction?: PromptAction
constructor(uiContext: UIContext) {
this.uiContext = uiContext;
this.promptAction = this.uiContext.getPromptAction();
}
intercept(dialogChain: DialogChain): void {
let params = new DialogParams()
params.callBack = () = > {
this.promptAction?.closeCustomDialog(this.contentNode)
dialogChain.proceed()
}
// UI展示的Node
this.contentNode = new ComponentContent(this.uiContext, wrapBuilder(DialogABuild), params);
// 打開彈窗
this.promptAction?.openCustomDialog(
this.contentNode,
{
isModal: true,
autoCancel: true,
alignment: DialogAlignment.Center
}
)
}
show(): boolean | Promise< boolean > {
return true
}
}
@Builder
function DialogABuild(params: DialogParams) {
// 封裝后的UI
DialogView({ eventModel: params,content:"恭喜您,獲得300萬積分,請及時領取!",confirmBtnContent:"領取",cancelBtnContent:"取消" })
}
export class DialogParams {
callBack = () = > {
}
}
- 將三個彈窗添加到彈窗管理類,然后依次執(zhí)行彈窗。
private dialogChain = new DialogChain()
this.dialogChain
.addIntercept(new DialogA(this.getUIContext()))
.addIntercept(new DialogB(this.getUIContext()))
.addIntercept(new DialogC(this.getUIContext()))
//開始執(zhí)行彈窗
this.dialogChain.proceed()
- 實現(xiàn)效果如下:
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
HarmonyOS
+關注
關注
80文章
2126瀏覽量
33054
發(fā)布評論請先 登錄
相關推薦
熱點推薦
【HarmonyOS 5】鴻蒙中常見的標題欄布局方案
【HarmonyOS 5】鴻蒙中常見的標題欄布局方案 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應用服務##鴻蒙金融類應用 (金融理財# 一、問題背景: 鴻蒙中常見的標題欄:矩形區(qū)域,左邊

HarmonyOS AI輔助編程工具(CodeGenie)報錯分析
解決方案。
3.CodeGenie分析后,點擊編輯區(qū)Shift+Ctrl+Y,接受AI提供的修復方案;點擊Shift+Ctrl+N拒絕?;蛴覀葘υ挻翱谥蠥ccept All/Reject All按鈕,快速接受/拒絕所有修改。
以上材料主要參考引用
發(fā)表于 07-11 17:48
《仿盒馬》app開發(fā)技術分享-- 分類模塊頂部導航列表彈窗(16)
技術棧
Appgallery connect
開發(fā)準備
上一節(jié)我們實現(xiàn)了分類頁面的頂部導航欄列表,并且實現(xiàn)了首頁金剛區(qū)跟首頁導航欄的聯(lián)動,這一節(jié)我們實現(xiàn)導航欄列表的彈窗功能,需要學習的知識點有自定義
發(fā)表于 06-30 10:34
華為開發(fā)者大會2025:軟通動力聯(lián)合江蘇宗申發(fā)布“微型車HarmonyOS Connect智慧出行解決方案”
華為開發(fā)者大會 2025期間,軟通動力攜手江蘇宗申車業(yè)有限公司聯(lián)合發(fā)布 “宗申微型車HarmonyOS Connect智慧出行解決方案” ,依托鴻蒙生態(tài)深度整合微型車行業(yè)資源,為中國電動微型車用戶

鴻蒙5開發(fā)寶藏案例分享---體驗流暢的首頁信息流
?** 鴻蒙新聞類首頁開發(fā)全攻略:流暢動效+懶加載實戰(zhàn)**
Hey 各位鴻蒙開發(fā)者! 今天要分享一個超實用的鴻蒙新聞類首頁開發(fā)方案,官方文檔里藏著的寶藏案例被我挖出來了!從流暢的Tab
發(fā)表于 06-12 11:42
?HarmonyOS座艙:貼片電容ESR對多設備協(xié)同供電的影響
本文以東莞市平尚電子科技有限公司(平尚科技)的AEC-Q200車規(guī)級貼片電容技術為核心,探討HarmonyOS智能座艙多設備協(xié)同供電場景中ESR對系統(tǒng)穩(wěn)定性的影響。通過低ESR導電聚合物材料、三維

HarmonyOS5云服務技術分享--賬號登錄文章整理
嘿,各位開發(fā)者朋友!今天咱們來聊一聊鴻蒙生態(tài)中備受關注的ArkTS(API 12),尤其是如何用它快速實現(xiàn)華為賬號登錄功能。不管你是剛接觸HarmonyOS的新手,還是想升級現(xiàn)有項目的技術咖
發(fā)表于 05-22 16:16
如何在KaihongOS操作系統(tǒng)上寫一個彈窗組件
(),}) }
點擊與onClick事件綁定的組件使彈窗彈出。
@Entry@Componentstruct CustomDialogUser {dialogController
發(fā)表于 04-30 06:44
DialogHub上線OpenHarmony開源社區(qū),高效開發(fā)鴻蒙應用彈窗
。
“DialogHub”的推出為開發(fā)者提供了一個開箱即用的彈窗管理解決方案,幫助開發(fā)者更高效地實現(xiàn)各種場景下的彈窗功能,顯著降低學習成本與開發(fā)成本。目前,“DialogHub”已開源至
發(fā)表于 04-03 17:30
中軟國際亮相華為HarmonyOS Connect伙伴峰會
近日,由華為主辦的2025年HarmonyOS Connect伙伴峰會在上海舉行,中軟國際受邀參加,并與華為完成HarmonyOS Connect賦能支持服務協(xié)議簽署。作為鴻蒙智聯(lián)解決方案伙伴,公司將持續(xù)為生態(tài)設備廠商打造軟硬件
軟通動力亮相華為HarmonyOS Connect伙伴峰會
近日,以“一起創(chuàng)造無限可能,同風起,耀星河”為主題的HarmonyOS Connect伙伴峰會在上海召開。作為首批HarmonyOS Connect生態(tài)解決方案商,軟通動力受邀出席峰會,與華為簽署
鴻蒙原生頁面高性能解決方案上線OpenHarmony社區(qū) 助力打造高性能原生應用
隨著HarmonyOS NEXT的正式推出,鴻蒙原生應用開發(fā)熱度高漲,數(shù)量激增。但在三方應用鴻蒙化進程中,性能問題頻出。為此,HarmonyOS NEXT推出了一整套原生頁面高性能解決方案,包括
發(fā)表于 01-02 18:00
HarmonyOS開發(fā)指導類文檔更新速遞(上)
、媒體相關能力新增、優(yōu)化文檔,方便開發(fā)者更加高效使用文檔。 ArkUI(方舟UI框架) ArkUI(方舟UI框架)是一個簡潔、高性能、支持跨設備的UI框架,提供了豐富的應用界面開發(fā)所需能力。 · 新增使用彈窗: 介紹各類彈窗的使用場景與實現(xiàn)方法,重點說明自定義

ShiMeta鴻蒙多屏同步拼接解決方案
???方案概述鴻蒙多屏同步解決方案在ShiMeta鴻蒙數(shù)字標牌系統(tǒng)的基礎上,通過信號處理器,實現(xiàn)多個顯示屏幕之間的內容同步顯示,以提升信息傳達的效率和視覺體驗。鴻蒙多屏拼接

評論