日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS實(shí)戰(zhàn):首頁(yè)多彈窗順序彈出終極解決方案

尤楓 ? 來源:jf_54996641 ? 作者:jf_54996641 ? 2025-06-09 16:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

隨著應(yīng)用軟件功能的不斷增加,應(yīng)用程序軟件首頁(yè)成為彈窗的重災(zāi)區(qū),不僅有升級(jí)彈窗,還有積分彈窗,簽到,引導(dǎo)等各種彈窗。為了徹底解彈窗問題,本文將使用設(shè)計(jì)模式解決這個(gè)痛點(diǎn)。

設(shè)計(jì)模式

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

實(shí)現(xiàn)方案

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

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

  /**
   * 調(diào)用繼續(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

    }
  }
}
  1. 自定義彈窗實(shí)現(xiàn)DialogIntercept 接口,通過show()方法的返回值決定當(dāng)前彈窗是否彈出,如簽到彈窗肯定是每天彈出,可以根據(jù)條件 直接返還 true?;蛘呤嵌Y物彈窗,當(dāng)接口查詢到還有是否有未領(lǐng)取的禮物來決定彈窗的是否彈出。這里簡(jiǎn)單測(cè)試一下。
  2. 分別定義彈窗 DialogA,DialogB,DialogC,實(shí)現(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萬積分,請(qǐng)及時(shí)領(lǐng)取!",confirmBtnContent:"領(lǐng)取",cancelBtnContent:"取消" })
}

export class DialogParams {
  callBack = () = > {
  }
}
  1. 將三個(gè)彈窗添加到彈窗管理類,然后依次執(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()
  1. 實(shí)現(xiàn)效果如下:

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2157

    瀏覽量

    36320
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    菲諾克科技推出沁恒CH9347有線透?jìng)餍酒瑧?yīng)用于移動(dòng)電源新國(guó)標(biāo)方案

    通信等類型解決方案, 目前Anker、海陸通、奧海已批量 可以無需用TFT屏導(dǎo)致成本較大增加,更無需重新更改外殼模具。 支持iOS、Android、HarmonyOS手機(jī)平板和Windows
    發(fā)表于 02-10 09:10

    鴻蒙版微信消息彈窗不能進(jìn)入聊天界面

    用的最新鴻蒙6.0系統(tǒng),微信版本也是最新的,之前用的HarmonyOS4.0的微信就可以點(diǎn)擊消息彈窗,直接進(jìn)入聊天界面,很方便。現(xiàn)在點(diǎn)擊消息彈窗是進(jìn)入微信主界面,不能進(jìn)入對(duì)應(yīng)的聊天界面,有大佬知道是微信問題還是系統(tǒng)問題嗎?
    發(fā)表于 12-11 16:20

    基于迅為RK3588開發(fā)板實(shí)現(xiàn)高性能機(jī)器狗主控解決方案-?AI能力實(shí)戰(zhàn):YOLOv5目標(biāo)檢測(cè)例程

    基于迅為RK3588開發(fā)板實(shí)現(xiàn)高性能機(jī)器狗主控解決方案-?AI能力實(shí)戰(zhàn):YOLOv5目標(biāo)檢測(cè)例程
    的頭像 發(fā)表于 11-28 11:32 ?1739次閱讀
    基于迅為RK3588開發(fā)板實(shí)現(xiàn)高性能機(jī)器狗主控<b class='flag-5'>解決方案</b>-?AI能力<b class='flag-5'>實(shí)戰(zhàn)</b>:YOLOv5目標(biāo)檢測(cè)例程

    場(chǎng)景智能拍攝實(shí)戰(zhàn):攝像頭模塊集成與調(diào)試指南!

    攝像頭模塊集成是實(shí)現(xiàn)場(chǎng)景智能拍攝的基礎(chǔ),而調(diào)試則是保障系統(tǒng)穩(wěn)定的關(guān)鍵。本指南聚焦實(shí)戰(zhàn),詳細(xì)講解攝像頭模塊的硬件集成方法與場(chǎng)景調(diào)試技巧,包括常見故障排查、性能優(yōu)化方案等,讓你在
    的頭像 發(fā)表于 11-21 17:58 ?610次閱讀
    <b class='flag-5'>多</b>場(chǎng)景智能拍攝<b class='flag-5'>實(shí)戰(zhàn)</b>:攝像頭模塊集成與調(diào)試指南!

    QCon·上海站HarmonyOS開發(fā)者技術(shù)分論壇:共探鴻蒙開發(fā)新機(jī)遇

    論壇(以下簡(jiǎn)稱“論壇”)成功舉辦,論壇聚焦 AI 實(shí)踐落地與技術(shù)賦能,邀請(qǐng)多位華為技術(shù)專家深度解讀并分享 HarmonyOS AI輔助開發(fā)能力、設(shè)備適配解決方案、場(chǎng)景化賦能、性能調(diào)優(yōu)、場(chǎng)景能力共建以及React?Native性
    的頭像 發(fā)表于 10-24 15:59 ?1004次閱讀
    QCon·上海站<b class='flag-5'>HarmonyOS</b>開發(fā)者技術(shù)分論壇:共探鴻蒙開發(fā)新機(jī)遇

    HarmonyOSAI編程編譯報(bào)錯(cuò)智能分析

    圖標(biāo)查看解決方案。 CodeGenie分析后,點(diǎn)擊編輯區(qū) Shift+Ctrl+Y ,接受AI提供的修復(fù)方案;點(diǎn)擊Shift+Ctrl+N拒絕?;蛴覀?cè)對(duì)話窗口中Accept All/Reject All按鈕,快速接受/拒絕所有修改。 本文主要從參考引用自
    發(fā)表于 08-25 17:40

    分享---超聲波焊接機(jī)設(shè)備實(shí)現(xiàn)告 \"警彈窗\" 效果的簡(jiǎn)單方法

    在實(shí)際設(shè)計(jì)產(chǎn)品UI界面中,經(jīng)常碰到要設(shè)計(jì)”告警彈窗”功能如,設(shè)備運(yùn)行中產(chǎn)生了告警信息時(shí),要彈出窗口提示用戶做操作。 使用拓普微廠家的串口屏開發(fā)工具SGTools,可以很容易的實(shí)現(xiàn)”告警彈窗”功能,只需要簡(jiǎn)單設(shè)置屬性就可以實(shí)現(xiàn);
    發(fā)表于 08-21 11:17

    直流電機(jī)EMC整改:從干擾源到解決方案實(shí)戰(zhàn)指南

    南柯電子|直流電機(jī)EMC整改:從干擾源到解決方案實(shí)戰(zhàn)指南
    的頭像 發(fā)表于 08-05 11:07 ?1383次閱讀

    鴻蒙非侵入式彈窗新解法,企查查正式開源“QuickDialog”彈窗組件庫(kù)

    近日,企查查將其自研的鴻蒙彈窗組件庫(kù)“QuickDialog”開源,并上線至?OpenHarmony 三方庫(kù)中心倉(cāng)。這是鴻蒙生態(tài)首個(gè)支持“彈窗堆棧暫存能力”的非侵入式彈窗解決方案,憑借
    的頭像 發(fā)表于 07-31 10:40 ?865次閱讀
    鴻蒙非侵入式<b class='flag-5'>彈窗</b>新解法,企查查正式開源“QuickDialog”<b class='flag-5'>彈窗</b>組件庫(kù)

    HarmonyOS 5】鴻蒙中常見的標(biāo)題欄布局方案

    HarmonyOS 5】鴻蒙中常見的標(biāo)題欄布局方案 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、問題背景: 鴻蒙中常見的標(biāo)題欄:矩形區(qū)域,左邊
    的頭像 發(fā)表于 07-11 18:30 ?1019次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】鴻蒙中常見的標(biāo)題欄布局<b class='flag-5'>方案</b>

    HarmonyOS AI輔助編程工具(CodeGenie)報(bào)錯(cuò)分析

    解決方案。 3.CodeGenie分析后,點(diǎn)擊編輯區(qū)Shift+Ctrl+Y,接受AI提供的修復(fù)方案;點(diǎn)擊Shift+Ctrl+N拒絕。或右側(cè)對(duì)話窗口中Accept All/Reject All按鈕,快速接受/拒絕所有修改。 以上材料主要參考引用
    發(fā)表于 07-11 17:48

    《仿盒馬》app開發(fā)技術(shù)分享-- 分類模塊頂部導(dǎo)航列表彈窗(16)

    技術(shù)棧 Appgallery connect 開發(fā)準(zhǔn)備 上一節(jié)我們實(shí)現(xiàn)了分類頁(yè)面的頂部導(dǎo)航欄列表,并且實(shí)現(xiàn)了首頁(yè)金剛區(qū)跟首頁(yè)導(dǎo)航欄的聯(lián)動(dòng),這一節(jié)我們實(shí)現(xiàn)導(dǎo)航欄列表的彈窗功能,需要學(xué)習(xí)的知識(shí)點(diǎn)有自定義
    發(fā)表于 06-30 10:34

    鴻蒙5開發(fā)寶藏案例分享---體驗(yàn)流暢的首頁(yè)信息流

    ?** 鴻蒙新聞?lì)?b class='flag-5'>首頁(yè)開發(fā)全攻略:流暢動(dòng)效+懶加載實(shí)戰(zhàn)** Hey 各位鴻蒙開發(fā)者! 今天要分享一個(gè)超實(shí)用的鴻蒙新聞?lì)?b class='flag-5'>首頁(yè)開發(fā)方案,官方文檔里藏著的寶藏案例被我挖出來了!從流暢的Tab
    發(fā)表于 06-12 11:42

    ?HarmonyOS座艙:貼片電容ESR對(duì)設(shè)備協(xié)同供電的影響

    本文以東莞市平尚電子科技有限公司(平尚科技)的AEC-Q200車規(guī)級(jí)貼片電容技術(shù)為核心,探討HarmonyOS智能座艙設(shè)備協(xié)同供電場(chǎng)景中ESR對(duì)系統(tǒng)穩(wěn)定性的影響。通過低ESR導(dǎo)電聚合物材料、三維
    的頭像 發(fā)表于 05-27 14:07 ?819次閱讀
    ?<b class='flag-5'>HarmonyOS</b>座艙:貼片電容ESR對(duì)<b class='flag-5'>多</b>設(shè)備協(xié)同供電的影響

    HarmonyOS5云服務(wù)技術(shù)分享--賬號(hào)登錄文章整理

    嘿,各位開發(fā)者朋友!今天咱們來聊一聊鴻蒙生態(tài)中備受關(guān)注的ArkTS(API 12),尤其是如何用它快速實(shí)現(xiàn)華為賬號(hào)登錄功能。不管你是剛接觸HarmonyOS的新手,還是想升級(jí)現(xiàn)有項(xiàng)目的技術(shù)咖
    發(fā)表于 05-22 16:16
    扬中市| 贺兰县| 舒城县| 大埔区| 松阳县| 吕梁市| 土默特左旗| 光山县| 普洱| 武宁县| 富源县| 包头市| 根河市| 宁阳县| 朝阳县| 沿河| 花莲县| 云龙县| 梓潼县| 巴中市| 内丘县| 宁南县| 团风县| 鸡西市| 灵武市| 铅山县| 郯城县| 赞皇县| 乐昌市| 平顺县| 红原县| 桦甸市| 利川市| 台南市| 无锡市| 南京市| 龙南县| 大庆市| 黎城县| 改则县| 新河县|