女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS實戰:首頁多彈窗順序彈出終極解決方案

尤楓 ? 來源:jf_54996641 ? 作者:jf_54996641 ? 2025-06-09 16:47 ? 次閱讀

背景

隨著應用軟件功能的不斷增加,應用程序軟件首頁成為彈窗的重災區,不僅有升級彈窗,還有積分彈窗,簽到,引導等各種彈窗。為了徹底解彈窗問題,本文將使用設計模式解決這個痛點。

設計模式

本方案采用責任鏈設計模式和建造者設計模式,通過將不同的彈窗添加到彈窗處理類,然后按顯示順序。

實現方案

  1. 先定義基礎彈窗接口 DialogIntercept,統一彈窗的行為。intercept() 方法用于執行下一個彈窗。show ()方法用于判斷當前彈窗是否顯示,這里同時支持異步接口請求返回的判斷。
export interface DialogIntercept{
    
  intercept(dialogChain:DialogChain):void

  show():boolean |Promise< boolean >
}
  1. 提供一個彈窗處理類DialogChain,用于處理多個彈窗的執行邏輯,將彈窗依次添加到 chainList 中保存,然后執行proceed()方法開始顯示彈窗,同時提供一個proceedNext() 方法用于直接跳過當前彈窗,由于代碼較多,此處省略了部分代碼。
/**
 * 處理彈窗執行
 */
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
  }

  /**
   * 不執行當前彈窗,可以直接跳過
   */
  proceedNext() {
    ++this.index
    this.proceed()
  }

  /**
   * 調用繼續執行下一步
   */
  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

    }
  }
}
  1. 自定義彈窗實現DialogIntercept 接口,通過show()方法的返回值決定當前彈窗是否彈出,如簽到彈窗肯定是每天彈出,可以根據條件 直接返還 true。或者是禮物彈窗,當接口查詢到還有是否有未領取的禮物來決定彈窗的是否彈出。這里簡單測試一下。
  2. 分別定義彈窗 DialogA,DialogB,DialogC,實現接口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 = () = > {
  }
}
  1. 將三個彈窗添加到彈窗管理類,然后依次執行彈窗。
private dialogChain = new DialogChain()

 this.dialogChain
      .addIntercept(new DialogA(this.getUIContext()))
      .addIntercept(new DialogB(this.getUIContext()))
      .addIntercept(new DialogC(this.getUIContext()))
 //開始執行彈窗
 this.dialogChain.proceed()
  1. 實現效果如下:

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • HarmonyOS
    +關注

    關注

    79

    文章

    2054

    瀏覽量

    32167
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    鴻蒙5開發寶藏案例分享---一多開發實例(地圖導航)

    ,歡迎在評論區扔需求~ 下期準備扒拉「智能家居跨設備聯動」的實戰案例,想看的同學記得三連催更! #HarmonyOS #鴻蒙開發 #一適配 #實戰教程
    發表于 06-03 16:17

    ?HarmonyOS座艙:貼片電容ESR對設備協同供電的影響

    本文以東莞市平尚電子科技有限公司(平尚科技)的AEC-Q200車規級貼片電容技術為核心,探討HarmonyOS智能座艙設備協同供電場景中ESR對系統穩定性的影響。通過低ESR導電聚合物材料、三維
    的頭像 發表于 05-27 14:07 ?95次閱讀
    ?<b class='flag-5'>HarmonyOS</b>座艙:貼片電容ESR對<b class='flag-5'>多</b>設備協同供電的影響

    HarmonyOS5云服務技術分享--賬號登錄文章整理

    嘿,各位開發者朋友!今天咱們來聊一聊鴻蒙生態中備受關注的ArkTS(API 12),尤其是如何用它快速實現華為賬號登錄功能。不管你是剛接觸HarmonyOS的新手,還是想升級現有項目的技術咖
    發表于 05-22 16:16

    如何在KaihongOS操作系統上寫一個彈窗組件

    (),}) } 點擊與onClick事件綁定的組件使彈窗彈出。 @Entry@Componentstruct CustomDialogUser {dialogController
    發表于 04-30 06:44

    Adams體動力學仿真解決方案全面解析

    一、Adams解決方案概述Adams(Automatic Dynamic Analysis of Mechanical Systems)作為全球領先的體動力學仿真軟件,由MSC Software
    發表于 04-17 17:24

    DialogHub上線OpenHarmony開源社區,高效開發鴻蒙應用彈窗

    。 “DialogHub”的推出為開發者提供了一個開箱即用的彈窗管理解決方案,幫助開發者更高效地實現各種場景下的彈窗功能,顯著降低學習成本與開發成本。目前,“DialogHub”已開源至
    發表于 04-03 17:30

    中軟國際亮相華為HarmonyOS Connect伙伴峰會

    近日,由華為主辦的2025年HarmonyOS Connect伙伴峰會在上海舉行,中軟國際受邀參加,并與華為完成HarmonyOS Connect賦能支持服務協議簽署。作為鴻蒙智聯解決方案伙伴,公司將持續為生態設備廠商打造軟硬件
    的頭像 發表于 03-20 16:30 ?524次閱讀

    軟通動力亮相華為HarmonyOS Connect伙伴峰會

    近日,以“一起創造無限可能,同風起,耀星河”為主題的HarmonyOS Connect伙伴峰會在上海召開。作為首批HarmonyOS Connect生態解決方案商,軟通動力受邀出席峰會,與華為簽署
    的頭像 發表于 03-20 15:40 ?393次閱讀

    頻段白色蝴蝶天線:通信領域的高性能解決方案

    深圳安騰納天線|頻段白色蝴蝶天線:通信領域的高性能解決方案
    的頭像 發表于 02-21 09:07 ?411次閱讀

    激光振鏡運動控制器在振鏡頭布料激光切割解決方案

    正運動振鏡頭布料激光切割解決方案
    的頭像 發表于 02-18 14:10 ?328次閱讀
    激光振鏡運動控制器在<b class='flag-5'>多</b>振鏡頭布料激光切割<b class='flag-5'>解決方案</b>

    Devart: dbForge Edge——您的終極多元數據庫解決方案

    和PostgreSQL數據庫的終極多元數據庫解決方案。 dbForge Edge可以為您帶來什么? 上下文感知SQL代碼補全、智能格式化和重構 具有逐步執行的自動調試功能 200多個真實測試數據的智能生成器
    的頭像 發表于 01-15 11:48 ?453次閱讀
    Devart: dbForge Edge——您的<b class='flag-5'>終極</b>多元數據庫<b class='flag-5'>解決方案</b>

    鴻蒙原生頁面高性能解決方案上線OpenHarmony社區 助力打造高性能原生應用

    隨著HarmonyOS NEXT的正式推出,鴻蒙原生應用開發熱度高漲,數量激增。但在三方應用鴻蒙化進程中,性能問題頻出。為此,HarmonyOS NEXT推出了一整套原生頁面高性能解決方案,包括
    發表于 01-02 18:00

    HarmonyOS開發指導類文檔更新速遞(上)

    、媒體相關能力新增、優化文檔,方便開發者更加高效使用文檔。 ArkUI(方舟UI框架) ArkUI(方舟UI框架)是一個簡潔、高性能、支持跨設備的UI框架,提供了豐富的應用界面開發所需能力。 · 新增使用彈窗: 介紹各類彈窗的使用場景與實現方法,重點說明自定義
    的頭像 發表于 12-30 09:50 ?845次閱讀
    <b class='flag-5'>HarmonyOS</b>開發指導類文檔更新速遞(上)

    ShiMeta鴻蒙屏同步拼接解決方案

    ???方案概述鴻蒙屏同步解決方案在ShiMeta鴻蒙數字標牌系統的基礎上,通過信號處理器,實現多個顯示屏幕之間的內容同步顯示,以提升信息傳達的效率和視覺體驗。鴻蒙屏拼接
    的頭像 發表于 12-13 16:45 ?610次閱讀
    ShiMeta鴻蒙<b class='flag-5'>多</b>屏同步拼接<b class='flag-5'>解決方案</b>

    激光錫焊:無線耳機精密制造的終極解決方案

    連接和微型組件固定等方面的應用。了解為什么激光錫焊是無線耳機精密制造的終極解決方案,并發現它如何幫助制造商提升產品競爭力和滿足消費者對高品質音頻體驗的需求。
    的頭像 發表于 08-14 11:50 ?706次閱讀
    激光錫焊:無線耳機精密制造的<b class='flag-5'>終極</b><b class='flag-5'>解決方案</b>