From 7dca3f9ada8ce736c36bd1073a1662d660d4b03a Mon Sep 17 00:00:00 2001 From: TickKiwi <> Date: Fri, 11 Apr 2025 15:05:01 +0800 Subject: [PATCH 1/8] =?UTF-8?q?DTS2025040316803=20--=20=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E6=8F=90=E4=BE=9Bhide=E5=8F=8AonHide/onWillHide=E5=9B=9E?= =?UTF-8?q?=E8=B0=83=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/ets/entryability/EntryAbility.ets | 2 +- .../resources/base/profile/main_pages.json | 3 +- .../src/main/ets/common/been/DialogAction.ets | 1 + hadss_dialog/src/main/ets/model/DialogHub.ets | 4 ++ .../ets/model/dialog/base/CommonDialog.ets | 38 ++++++++++++++++++- .../ets/model/dialog/base/CustomDialog.ets | 11 ++++-- .../ets/model/dialog/base/PopupDialog.ets | 4 +- .../ets/model/dialog/interface/InfDialog.ets | 2 + .../ets/model/lifecycle/DialogLifeCycle.ets | 10 +++++ .../model/lifecycle/DialogLifeCycleHelper.ets | 25 ++++++++++++ .../model/lifecycle/GlobalDialogLifeCycle.ets | 13 +++++++ .../lifecycle/GlobalDialogLifeCycleHelper.ets | 25 ++++++++++++ 12 files changed, 128 insertions(+), 10 deletions(-) diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index 5445a81..58f188f 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -16,7 +16,7 @@ export default class EntryAbility extends UIAbility { // Main window is created, set main page for this ability hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); - windowStage.loadContent('pages/Index', (err) => { + windowStage.loadContent('pages/DialogLevelTest', (err) => { if (err.code) { hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); return; diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json index 0e124d1..482be41 100644 --- a/entry/src/main/resources/base/profile/main_pages.json +++ b/entry/src/main/resources/base/profile/main_pages.json @@ -9,6 +9,7 @@ "pages/CustomPopupTest", "pages/APITestPage", "pages/CustomTest", - "pages/PerformanceTest" + "pages/PerformanceTest", + "pages/DialogLevelTest" ] } \ No newline at end of file diff --git a/hadss_dialog/src/main/ets/common/been/DialogAction.ets b/hadss_dialog/src/main/ets/common/been/DialogAction.ets index c8c137f..134ecd2 100644 --- a/hadss_dialog/src/main/ets/common/been/DialogAction.ets +++ b/hadss_dialog/src/main/ets/common/been/DialogAction.ets @@ -16,4 +16,5 @@ export interface DialogAction { show: () => void; dismiss: () => void; + hide: () => void; } \ No newline at end of file diff --git a/hadss_dialog/src/main/ets/model/DialogHub.ets b/hadss_dialog/src/main/ets/model/DialogHub.ets index ea86b4d..4a3f221 100644 --- a/hadss_dialog/src/main/ets/model/DialogHub.ets +++ b/hadss_dialog/src/main/ets/model/DialogHub.ets @@ -289,6 +289,10 @@ export class DialogHub { .getCurrentPageDialogs(undefined, type, modelName, DialogStatus.SHOW) ?? []; } + static getAllPageDialogs(): InfDialog[] { + return AppLifeCycleHelper.getInstance(DialogHub.uiContext).getCurrentPageDialogs(undefined, undefined, undefined, undefined) ?? []; + } + static dispatchBackPressToDialog(): DialogBackPressResult { let curentPageDialogs = AppLifeCycleHelper.getInstance(DialogHub.uiContext) .getCurrentPageDialogs(undefined, undefined, undefined, DialogStatus.SHOW); diff --git a/hadss_dialog/src/main/ets/model/dialog/base/CommonDialog.ets b/hadss_dialog/src/main/ets/model/dialog/base/CommonDialog.ets index a928c35..1bcd2f1 100644 --- a/hadss_dialog/src/main/ets/model/dialog/base/CommonDialog.ets +++ b/hadss_dialog/src/main/ets/model/dialog/base/CommonDialog.ets @@ -53,6 +53,9 @@ export class CommonDialog implements InfDialog { }, dismiss: (): void => { this.dismiss(); + }, + hide: (): void => { + this.hide(); } } @@ -159,8 +162,39 @@ export class CommonDialog implements InfDialog { } public hide(isInsideCall?: boolean) { - this.close(true, isInsideCall); - KeyboardAvoidHelper.getInstance().restore(); + if (isInsideCall) { + this.isShown = false; + this.dialogStatus = DialogStatus.HIDE; + this.dialogExecutor?.hide(); + return true; + } else if (!this.isShown) { + return true; + } else { + DHubLogger.debug(`DialogId:${this.dialogId},type:${DialogType[this.type]}, dialog about to hide`); + let singleShouldHide: boolean = (this.lifeCycleHelper as DialogLifeCycleHelper).dispatchWillHide(); + let globalShouldHide: boolean = GlobalDialogLifeCycleHelper.getInstance().dispatchWillHide(this); + if (singleShouldHide && globalShouldHide) { + this.dialogStatus = DialogStatus.HIDE; + DHubLogger.debug(`DialogId:${this.dialogId},type:${DialogType[this.type]}, dialog Executor start hide`); + + if (this.animatorHelper.isUseAnimation()) { + this.animatorHelper.close(() => { + this.isShown = false; + this.dialogExecutor?.hide(); + }); + } else { + this.dialogExecutor?.hide(); + } + KeyboardAvoidHelper.getInstance().restore(); + setTimeout(() => { + (this.lifeCycleHelper as DialogLifeCycleHelper)?.dispatchHide(); + GlobalDialogLifeCycleHelper.getInstance().dispatchHide(this); + DHubLogger.debug(`DialogId:${this.dialogId},type:${DialogType[this.type]}, dialog finish hide`); + }); + return true; + } + } + return false; } public dismiss(dismissReason?: DialogDismissReason): boolean { diff --git a/hadss_dialog/src/main/ets/model/dialog/base/CustomDialog.ets b/hadss_dialog/src/main/ets/model/dialog/base/CustomDialog.ets index 7e10f58..de5d6f9 100644 --- a/hadss_dialog/src/main/ets/model/dialog/base/CustomDialog.ets +++ b/hadss_dialog/src/main/ets/model/dialog/base/CustomDialog.ets @@ -184,10 +184,13 @@ export class CustomDialog extends CommonDialog implements InfCustomDialog { return super.dismiss(dismissReason); } - public hide(isInsideCall?: boolean): void { - (this.builderOptions as CustomOption).focusable = false; - this.update(['focusable']); - super.hide(isInsideCall); + public hide(isInsideCall?: boolean): boolean { + let res = super.hide(isInsideCall); + if (res) { + (this.builderOptions as CustomOption).focusable = false; + this.update(['focusable']); + } + return res; } public show(isInsideCall?: boolean | undefined): boolean { diff --git a/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets b/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets index fe89edd..faacc30 100644 --- a/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets +++ b/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets @@ -113,9 +113,9 @@ export class PopupDialog extends CustomDialog implements InfPopup { this.updateDialogPosition(); } - public hide(isInsideCall?: boolean | undefined): void { + public hide(isInsideCall?: boolean | undefined): boolean { this.needWaitRouter = Boolean(isInsideCall); // need wait when router/navigation to old Page - super.hide(isInsideCall) + return super.hide(isInsideCall) } public updateDialogPosition() { diff --git a/hadss_dialog/src/main/ets/model/dialog/interface/InfDialog.ets b/hadss_dialog/src/main/ets/model/dialog/interface/InfDialog.ets index b8ccb74..34dfea0 100644 --- a/hadss_dialog/src/main/ets/model/dialog/interface/InfDialog.ets +++ b/hadss_dialog/src/main/ets/model/dialog/interface/InfDialog.ets @@ -27,6 +27,8 @@ export interface InfDialog { show(): boolean; + hide(): void; + dismiss(): boolean; getStatus(): DialogStatus; diff --git a/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycle.ets b/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycle.ets index a3dd127..a804e3c 100644 --- a/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycle.ets +++ b/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycle.ets @@ -25,6 +25,16 @@ export interface DialogLifeCycle { */ onWillShow?: () => boolean; + /** + * Dialog hided + */ + onHide?: () => void; + + /** + * Dialog about to hide + */ + onWillHide?: () => boolean; + /** * Popup closed */ diff --git a/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycleHelper.ets b/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycleHelper.ets index 75dea05..02aa80d 100644 --- a/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycleHelper.ets +++ b/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycleHelper.ets @@ -46,6 +46,31 @@ export class DialogLifeCycleHelper extends ListenerManager { return willShow; } + /** + * dispatch dialog hide life cycle + */ + public dispatchHide(): void { + this.listeners.forEach((lifecycle) => { + lifecycle.onHide?.(); + }) + } + + /** + * dispatch dialog willHide life cycle + * @returns the result of dialog hide + */ + public dispatchWillHide(): boolean { + let hide = true; + for (let i = 0; i < this.listeners.length; i++) { + let lifecycle = this.listeners[i]; + if (lifecycle.onWillHide && !lifecycle.onWillHide()) { + hide = false; + break; + } + } + return hide; + } + /** * dispatch dialog dismiss life cycle. * diff --git a/hadss_dialog/src/main/ets/model/lifecycle/GlobalDialogLifeCycle.ets b/hadss_dialog/src/main/ets/model/lifecycle/GlobalDialogLifeCycle.ets index cfe8ec1..3c2916c 100644 --- a/hadss_dialog/src/main/ets/model/lifecycle/GlobalDialogLifeCycle.ets +++ b/hadss_dialog/src/main/ets/model/lifecycle/GlobalDialogLifeCycle.ets @@ -28,6 +28,19 @@ export interface GlobalDialogLifeCycle { */ onWillShow?: (dialog: CommonDialog) => boolean; + /** + * lifecycle after the dialog hide + * @param dialog + */ + onHide?: (dialog: CommonDialog) => void; + + /** + * lifecycle before the dialog hide + * @param dialog + * @returns whether the dialog will hide + */ + onWillHide?: (dialog: CommonDialog) => boolean; + /** * close * diff --git a/hadss_dialog/src/main/ets/model/lifecycle/GlobalDialogLifeCycleHelper.ets b/hadss_dialog/src/main/ets/model/lifecycle/GlobalDialogLifeCycleHelper.ets index 5591580..cf030cf 100644 --- a/hadss_dialog/src/main/ets/model/lifecycle/GlobalDialogLifeCycleHelper.ets +++ b/hadss_dialog/src/main/ets/model/lifecycle/GlobalDialogLifeCycleHelper.ets @@ -58,6 +58,31 @@ export class GlobalDialogLifeCycleHelper extends ListenerManager { + lifecycle.onHide?.(dialog); + }); + } + + /** + * dispatch dialog will hide life cycle + * @param dialog + * @returns whether the dialog will hide + */ + public dispatchWillHide(dialog: CommonDialog): boolean { + let willHide: boolean = true; + this.listeners.forEach((lifecycle) => { + if (lifecycle.onWillHide && !lifecycle.onWillHide(dialog)) { + willHide = false; + } + }); + return willHide; + } + /** * dispatch dialog dismiss life cycle. * -- Gitee From 74f940d66c4e3a6e3130059f023f5e508372004a Mon Sep 17 00:00:00 2001 From: TickKiwi <> Date: Fri, 11 Apr 2025 15:05:20 +0800 Subject: [PATCH 2/8] =?UTF-8?q?DTS2025040316803=20--=20=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E6=8F=90=E4=BE=9Bhide=E5=8F=8AonHide/onWillHide=E5=9B=9E?= =?UTF-8?q?=E8=B0=83=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/pages/DialogLevelTest.ets | 156 +++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 entry/src/main/ets/pages/DialogLevelTest.ets diff --git a/entry/src/main/ets/pages/DialogLevelTest.ets b/entry/src/main/ets/pages/DialogLevelTest.ets new file mode 100644 index 0000000..28fdb88 --- /dev/null +++ b/entry/src/main/ets/pages/DialogLevelTest.ets @@ -0,0 +1,156 @@ +import { DialogAction, DialogHub, DialogStatus, InfCustomDialog, InfDialog } from '@hadss/dialoghub'; +import { CommonDialog } from '@hadss/dialoghub/src/main/ets/model/dialog/base/CommonDialog'; + +class Dialog1Param { + close: () => void; + constructor(close: () => void) { + this.close = close; + } +} + +@Builder +function dialog1(param: Dialog1Param) { + Column() { + TextInput({ placeholder: '请输入' }) + + + Text('dialog 1') + .fontSize(24) + .fontColor(Color.Red) + .onClick(() => { + param.close(); + }) + + } + .width('90%') + .height(200) +} + +@Builder +function dialog2() { + Column() { + Text('dialog 2') + .fontSize(24) + .fontColor(Color.Blue) + } + .width('90%') + .height(150) +} + +@Entry +@Component +struct DialogLevelTest { + @State message: string = 'Hello World'; + dialog1: InfCustomDialog | undefined = undefined; + dialog2: InfCustomDialog | undefined = undefined; + + initDialog() { + DialogHub.init(this.getUIContext()); + this.dialog1 = DialogHub.getCustomDialog() + .setConfig({ + dialogBehavior: { + isModal: true, + passThroughGesture: false, + autoDismiss: true + } + }) + .setStyle({ + borderColor: Color.Black, + borderWidth: 2 + }) + .setLifeCycleListener({ + onShow: () => { + console.log('testTag: dialog1 onshow called'); + }, + onHide: () => { + console.log('testTag: dialog1 onHide called'); + }, + onWillHide: () => { + console.log('testTag: dialog1 onWillHide called'); + return true; + }, + onDismiss: () => { + console.log('testTag: dialog1 onDismiss called'); + } + }) + .setOperableContent( + wrapBuilder(dialog1), (dialogAction: DialogAction) => { + let param = new Dialog1Param(() => { + if (this.dialog2) { + this.dialog2.show(); + } + }) + return param; + } + ).build(); + this.dialog2 = DialogHub.getCustomDialog().setContent(wrapBuilder(dialog2)) + .setConfig({ + dialogBehavior: { + autoDismiss: true + } + }) + .setLifeCycleListener({ + onShow: () => { + let dialogs = DialogHub.getAllPageDialogs(); + console.log('testTag: dialogs: ', dialogs.length, dialogs[0].dialogId); + console.log('testTag: dialog1.dialogId: ', this.dialog1?.dialogId); + if (dialogs.length >= 1) { + dialogs[0].hide(); + } + console.log('testTag: dialog2 onshow called'); + }, + onHide: () => { + console.log('testTag: dialog2 onHide called'); + }, + onWillHide: () => { + console.log('testTag: dialog2 onWillHide called'); + return true; + }, + onDismiss: () => { + let dialogs = DialogHub.getAllPageDialogs(); + if (dialogs.length >= 2) { + dialogs[1].show(); + } + console.log('testTag: dialog2 onDismiss called'); + } + }) + .build(); + } + + aboutToAppear(): void { + // this.initDialog(); + } + + build() { + Column() { + Button('open 1') + .onClick(() => { + // let param: Dialog1Param = new Dialog1Param(() => { + // if (this.dialog2) { + // this.dialog1?.hide(); + // this.dialog2.show(); + // } + // }) + // this.dialog1 + // if (!this.dialog1) { + this.initDialog(); + // } + this.dialog1?.show(); + }) + + Button('open 2') + .onClick(() => { + if (this.dialog1 && this.dialog1.getStatus() == DialogStatus.SHOW) { + this.dialog1.hide(); + } + this.dialog2?.show(); + }) + Button('close 2') + .onClick(() => { + this.dialog2?.hide(); + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file -- Gitee From 4a9386569cfd10502bbe06f2e6360b7f212d6b06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=B3=E4=BC=AF=E8=A8=80?= Date: Fri, 28 Mar 2025 17:09:40 +0800 Subject: [PATCH 3/8] =?UTF-8?q?updateContent=E8=BF=9E=E7=BB=AD=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E4=B8=A4=E6=AC=A1=E5=87=BA=E7=8E=B0js=5Fcrash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hadss_dialog/src/main/ets/common/util/CommonUtils.ets | 2 +- hadss_dialog/src/main/ets/common/util/ObjectUtils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hadss_dialog/src/main/ets/common/util/CommonUtils.ets b/hadss_dialog/src/main/ets/common/util/CommonUtils.ets index 4007cfc..0255538 100644 --- a/hadss_dialog/src/main/ets/common/util/CommonUtils.ets +++ b/hadss_dialog/src/main/ets/common/util/CommonUtils.ets @@ -48,7 +48,7 @@ export class CommonUtils { if (!isFilterUndefined || newValue !== undefined) { if (isDeepCopy && typeof newValue === "object" && typeof oldValue === "object") { - CommonUtils.copyOptions(oldValue, newValue, isFilterUndefined); + CommonUtils.copyOptions(oldValue, newValue, isFilterUndefined, isDeepCopy); Reflect.set(dst, key, oldValue); } else { Reflect.set(dst, key, newValue); diff --git a/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts b/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts index fc922dc..b83a1cb 100644 --- a/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts +++ b/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts @@ -19,6 +19,6 @@ export class ObjectUtils { } public static createByPrototypeOf(obj: any): any { - return Object.create(Object.getPrototypeOf(obj)); + return (!obj) ?? Object.create(Object.getPrototypeOf(obj)); } } \ No newline at end of file -- Gitee From 6578f98f38e3185e61f95d31f63184d2ff856d26 Mon Sep 17 00:00:00 2001 From: TickKiwi <> Date: Fri, 11 Apr 2025 16:15:42 +0800 Subject: [PATCH 4/8] =?UTF-8?q?Revert=20"updateContent=E8=BF=9E=E7=BB=AD?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E4=B8=A4=E6=AC=A1=E5=87=BA=E7=8E=B0js=5Fcras?= =?UTF-8?q?h"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 39533c5ff428b9e6bf5f738f31c9fc704df36621. --- hadss_dialog/src/main/ets/common/util/CommonUtils.ets | 2 +- hadss_dialog/src/main/ets/common/util/ObjectUtils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hadss_dialog/src/main/ets/common/util/CommonUtils.ets b/hadss_dialog/src/main/ets/common/util/CommonUtils.ets index 0255538..4007cfc 100644 --- a/hadss_dialog/src/main/ets/common/util/CommonUtils.ets +++ b/hadss_dialog/src/main/ets/common/util/CommonUtils.ets @@ -48,7 +48,7 @@ export class CommonUtils { if (!isFilterUndefined || newValue !== undefined) { if (isDeepCopy && typeof newValue === "object" && typeof oldValue === "object") { - CommonUtils.copyOptions(oldValue, newValue, isFilterUndefined, isDeepCopy); + CommonUtils.copyOptions(oldValue, newValue, isFilterUndefined); Reflect.set(dst, key, oldValue); } else { Reflect.set(dst, key, newValue); diff --git a/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts b/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts index b83a1cb..fc922dc 100644 --- a/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts +++ b/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts @@ -19,6 +19,6 @@ export class ObjectUtils { } public static createByPrototypeOf(obj: any): any { - return (!obj) ?? Object.create(Object.getPrototypeOf(obj)); + return Object.create(Object.getPrototypeOf(obj)); } } \ No newline at end of file -- Gitee From c0efcc428109f0c078adc32f4a70b1b2c0823bb5 Mon Sep 17 00:00:00 2001 From: TickKiwi <> Date: Sun, 13 Apr 2025 18:23:23 +0800 Subject: [PATCH 5/8] =?UTF-8?q?ActionSheet=E5=BC=B9=E7=AA=97=E6=94=AF?= =?UTF-8?q?=E6=8C=81hide=E6=96=B9=E6=B3=95=E5=8F=8A=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=EF=BC=8Cpopup=E5=BC=B9=E7=AA=97hide=E5=90=8E?= =?UTF-8?q?=E5=86=8D=E6=AC=A1=E6=89=93=E5=BC=80=E4=BD=8D=E7=BD=AE=E5=8F=91?= =?UTF-8?q?=E7=94=9F=E5=81=8F=E7=A7=BB=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + docs/Reference.md | 3 + entry/src/main/ets/pages/CustomPopupTest.ets | 11 +++- entry/src/main/ets/pages/DialogLevelTest.ets | 59 ++++++++++++++++--- .../ets/model/dialog/base/CommonDialog.ets | 1 + .../ets/model/dialog/base/PopupDialog.ets | 9 ++- .../dialog/executor/BindSheetExecutor.ets | 3 +- .../model/lifecycle/DialogLifeCycleHelper.ets | 18 ++++++ 8 files changed, 91 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index ea27eaf..54890a3 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ /.clang-tidy **/.test /.appanalyzer +/build-profile.json5 oh-package-lock.json5 \ No newline at end of file diff --git a/docs/Reference.md b/docs/Reference.md index 99ed551..9005a2d 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -324,6 +324,7 @@ Builder与Template关系图 | addLifecycleListener | (listener: **DialogLifeCycle**) => **void** | 添加生命周期监听,多次监听不会前后覆盖,而是多次触发 | | removeLifecycleListener | (listener: **DialogLifeCycle**) => **void** | 删除生命周期监听 | | show | () => boolean | 展示弹窗,允许指定当次弹窗弹出的上下文 | +| hide | () => boolean | 隐藏弹窗(节点不下树) | | dismiss | () => boolean | 关闭弹窗(对应节点下树) | | updateContent | (param: T) => **void** | 更新开发者给弹窗指定的参数;要求传入类型与弹窗内容Builder的入参保持一致,否则会报错 | | updateStyle | (param: **DialogStyle**) => void | 更新基本样式 | @@ -334,6 +335,8 @@ Builder与Template关系图 |---------------|-------------------------------------------|----------------------------------------------------------------------------------------------| | onShow | () => void | 弹出
说明:弹窗跟随页面自动隐藏/恢复不出发show/willShow生命周期 | | onWillShow | () => boolean | 即将弹出,
返回true,表示允许本次show
返回false,表示拒绝本次show
说明:弹窗跟随页面自动隐藏/恢复时不出发show/willShow生命周期 | +| onHide | () => void | 隐藏弹窗 | +| onWillHide | () => boolean | 即将隐藏 | | onDismiss | () => void | 关闭 | | onWillDismiss | (reason?: DialogDismissReason) => boolean | 即将关闭,通过回调的方式,提供开发者本次弹窗即将关闭的原因:
返回true,表示允许本次dismiss
返回false,表示拒绝本次dismiss | diff --git a/entry/src/main/ets/pages/CustomPopupTest.ets b/entry/src/main/ets/pages/CustomPopupTest.ets index 4281a64..113e640 100644 --- a/entry/src/main/ets/pages/CustomPopupTest.ets +++ b/entry/src/main/ets/pages/CustomPopupTest.ets @@ -77,7 +77,7 @@ struct CustomPopupTest { .id('cwq' + index) .onClick(() => { console.log('[DialogHub DEBUG] Click') - DialogHub + this.popupDialog = DialogHub .getPopup() .setContent(wrapBuilder(multiTest)) .setAnimation({ @@ -96,8 +96,8 @@ struct CustomPopupTest { dialogBehavior: { autoDismiss: true, passThroughGesture: false, isModal: true } }) .setComponentTargetId("cwq" + index) - .build() - .show(); + .build(); + this.popupDialog.show(); }) }.width('100%').alignItems(index % 2 === 0 ? HorizontalAlign.Start : HorizontalAlign.End).padding(30) @@ -121,6 +121,11 @@ struct CustomPopupTest { url: 'pages/CustomPopupTest' }) }) + + Button('close popup') + .onClick(() => { + + }) } .justifyContent(FlexAlign.Center) .alignItems(HorizontalAlign.Center) diff --git a/entry/src/main/ets/pages/DialogLevelTest.ets b/entry/src/main/ets/pages/DialogLevelTest.ets index 28fdb88..4c4edd7 100644 --- a/entry/src/main/ets/pages/DialogLevelTest.ets +++ b/entry/src/main/ets/pages/DialogLevelTest.ets @@ -1,4 +1,5 @@ -import { DialogAction, DialogHub, DialogStatus, InfCustomDialog, InfDialog } from '@hadss/dialoghub'; +import { DialogAction, DialogHub, DialogStatus, InfCustomDialog, InfDialog, InfSheet } from '@hadss/dialoghub'; +import { DHubLogger } from '@hadss/dialoghub/src/main/ets/log/DHubLogger'; import { CommonDialog } from '@hadss/dialoghub/src/main/ets/model/dialog/base/CommonDialog'; class Dialog1Param { @@ -43,6 +44,9 @@ struct DialogLevelTest { @State message: string = 'Hello World'; dialog1: InfCustomDialog | undefined = undefined; dialog2: InfCustomDialog | undefined = undefined; + toastDialog: InfCustomDialog | undefined = undefined; + popupDialog: InfCustomDialog | undefined = undefined; + sheetDialog: InfSheet | undefined = undefined; initDialog() { DialogHub.init(this.getUIContext()); @@ -115,10 +119,31 @@ struct DialogLevelTest { } }) .build(); + + this.toastDialog = DialogHub.getToast().setTextContent('Toast') + .setDuration(10000).build(); + + this.popupDialog = DialogHub.getPopup().setTextContent('Popup') + .setComponentTargetId('ssspopup') + .build(); + + this.sheetDialog = + DialogHub.getSheet().setContent(wrapBuilder(dialog2)) + .setComponentTargetId('sheet') + .setLifeCycleListener({ + onShow: () => { + console.log('testTag: sheet showed'); + }, + onHide: () => { + console.log('testTag: sheet hided'); + } + }) + .build(); } aboutToAppear(): void { - // this.initDialog(); + DHubLogger.openLog("DEBUG"); + this.initDialog(); } build() { @@ -138,19 +163,35 @@ struct DialogLevelTest { this.dialog1?.show(); }) - Button('open 2') + Button('open toast') .onClick(() => { - if (this.dialog1 && this.dialog1.getStatus() == DialogStatus.SHOW) { - this.dialog1.hide(); - } - this.dialog2?.show(); + this.toastDialog?.show(); + setTimeout(() => { + this.toastDialog?.hide(); + }, 3000) + }) + Button('open popup') + .onClick(() => { + this.popupDialog?.show(); + // setTimeout(() => { + // this.popupDialog?.hide(); + // }, 3000) + }).id('ssspopup') + Button('close popup') + .onClick(() => { + this.popupDialog?.hide(); }) - Button('close 2') + + Button('open sheet') .onClick(() => { - this.dialog2?.hide(); + this.sheetDialog?.show(); + setTimeout(() => { + this.sheetDialog?.hide(); + }, 3000) }) } .height('100%') .width('100%') + .id('sheet') } } \ No newline at end of file diff --git a/hadss_dialog/src/main/ets/model/dialog/base/CommonDialog.ets b/hadss_dialog/src/main/ets/model/dialog/base/CommonDialog.ets index 1bcd2f1..02b473d 100644 --- a/hadss_dialog/src/main/ets/model/dialog/base/CommonDialog.ets +++ b/hadss_dialog/src/main/ets/model/dialog/base/CommonDialog.ets @@ -183,6 +183,7 @@ export class CommonDialog implements InfDialog { this.dialogExecutor?.hide(); }); } else { + this.isShown = false; this.dialogExecutor?.hide(); } KeyboardAvoidHelper.getInstance().restore(); diff --git a/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets b/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets index faacc30..b7a69aa 100644 --- a/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets +++ b/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets @@ -40,6 +40,7 @@ export class PopupDialog extends CustomDialog implements InfPopup { } private arrowOffsetXCache = 0 private arrowOffsetYCache = 0 + private selfRectangle: componentUtils.ComponentInfo | undefined = undefined; constructor(uiContext: UIContext, options: PopupOption, lifeCycle: DialogLifeCycle) { super(uiContext, options, lifeCycle); @@ -126,7 +127,13 @@ export class PopupDialog extends CustomDialog implements InfPopup { (this.builderOptions as PopupOption).targetCompRectangle = targetRectangle; updateKeys.push('targetCompRectRectangle') DHubLogger.debug(`PopupDialogId:${this.dialogId},type:${DialogType[this.type]}, Got targetRectangle ${JSON.stringify(targetRectangle)}}`); - let selfRectangle = this.componentUtil.getRectangleById(this.builderOptions.dialogId); + if (!this.selfRectangle) { + this.selfRectangle = this.componentUtil.getRectangleById(this.builderOptions.dialogId); + if (this.selfRectangle.size.width == 0 && this.selfRectangle.size.height == 0) { + this.selfRectangle = undefined; + } + } + let selfRectangle = this.selfRectangle ?? this.componentUtil.getRectangleById(this.builderOptions.dialogId); DHubLogger.debug(`PopupDialogId:${this.dialogId},type:${DialogType[this.type]}, Got selfRectangle ${JSON.stringify(selfRectangle)}}`); this.dialogRectangle = selfRectangle; diff --git a/hadss_dialog/src/main/ets/model/dialog/executor/BindSheetExecutor.ets b/hadss_dialog/src/main/ets/model/dialog/executor/BindSheetExecutor.ets index 16bd212..81ca8ae 100644 --- a/hadss_dialog/src/main/ets/model/dialog/executor/BindSheetExecutor.ets +++ b/hadss_dialog/src/main/ets/model/dialog/executor/BindSheetExecutor.ets @@ -120,11 +120,12 @@ export class BindSheetExecutor extends DialogExecutor { } public hide() { + this.uiContext.closeBindSheet(this.contentNode); } public dismiss(): void { this.uiContext.closeBindSheet(this.contentNode); - this.init(); + this.contentNode = undefined; } public resetIndex(): void { diff --git a/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycleHelper.ets b/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycleHelper.ets index 02aa80d..3ebb6f4 100644 --- a/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycleHelper.ets +++ b/hadss_dialog/src/main/ets/model/lifecycle/DialogLifeCycleHelper.ets @@ -114,6 +114,24 @@ export class SheetLifeCycleHelper extends ListenerManager { return willShow; } + public dispatchHide(): void { + this.listeners.forEach((lifecycle) => { + lifecycle.onHide?.(); + }) + } + + public dispatchWillHide(): boolean { + let hide = true; + for (let i = 0; i < this.listeners.length; i++) { + let lifecycle = this.listeners[i]; + if (lifecycle.onWillHide && !lifecycle.onWillHide()) { + hide = false; + break; + } + } + return hide; + } + public dispatchDismiss(): void { this.listeners.forEach((lifecycle) => { lifecycle.onDismiss?.(); -- Gitee From a57c71ca7ad1d1f9038745e60943216e74b20af9 Mon Sep 17 00:00:00 2001 From: TickKiwi <> Date: Mon, 14 Apr 2025 16:24:12 +0800 Subject: [PATCH 6/8] =?UTF-8?q?hide=E6=96=B9=E6=B3=95=E8=BF=94=E5=9B=9Eboo?= =?UTF-8?q?lean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/pages/DialogLevelTest.ets | 35 +++++++++++-------- .../ets/model/dialog/interface/InfDialog.ets | 2 +- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/entry/src/main/ets/pages/DialogLevelTest.ets b/entry/src/main/ets/pages/DialogLevelTest.ets index 4c4edd7..6e52ae6 100644 --- a/entry/src/main/ets/pages/DialogLevelTest.ets +++ b/entry/src/main/ets/pages/DialogLevelTest.ets @@ -64,7 +64,12 @@ struct DialogLevelTest { }) .setLifeCycleListener({ onShow: () => { - console.log('testTag: dialog1 onshow called'); + setTimeout(() => { + let dialogs = DialogHub.getAllPageDialogs(); + if (dialogs.length >= 2) { + dialogs[1].hide(); + } + }) }, onHide: () => { console.log('testTag: dialog1 onHide called'); @@ -95,13 +100,12 @@ struct DialogLevelTest { }) .setLifeCycleListener({ onShow: () => { - let dialogs = DialogHub.getAllPageDialogs(); - console.log('testTag: dialogs: ', dialogs.length, dialogs[0].dialogId); - console.log('testTag: dialog1.dialogId: ', this.dialog1?.dialogId); - if (dialogs.length >= 1) { - dialogs[0].hide(); - } - console.log('testTag: dialog2 onshow called'); + setTimeout(() => { + let dialogs = DialogHub.getAllPageDialogs(); + if (dialogs.length >= 2) { + dialogs[1].hide(); + } + }) }, onHide: () => { console.log('testTag: dialog2 onHide called'); @@ -111,11 +115,12 @@ struct DialogLevelTest { return true; }, onDismiss: () => { - let dialogs = DialogHub.getAllPageDialogs(); - if (dialogs.length >= 2) { - dialogs[1].show(); - } - console.log('testTag: dialog2 onDismiss called'); + setTimeout(() => { + let dialogs = DialogHub.getAllPageDialogs(); + if (dialogs.length >= 1) { + dialogs[0].show(); + } + }) } }) .build(); @@ -124,7 +129,7 @@ struct DialogLevelTest { .setDuration(10000).build(); this.popupDialog = DialogHub.getPopup().setTextContent('Popup') - .setComponentTargetId('ssspopup') + .setComponentTargetId('popup') .build(); this.sheetDialog = @@ -176,7 +181,7 @@ struct DialogLevelTest { // setTimeout(() => { // this.popupDialog?.hide(); // }, 3000) - }).id('ssspopup') + }).id('popup') Button('close popup') .onClick(() => { this.popupDialog?.hide(); diff --git a/hadss_dialog/src/main/ets/model/dialog/interface/InfDialog.ets b/hadss_dialog/src/main/ets/model/dialog/interface/InfDialog.ets index 34dfea0..3afe46d 100644 --- a/hadss_dialog/src/main/ets/model/dialog/interface/InfDialog.ets +++ b/hadss_dialog/src/main/ets/model/dialog/interface/InfDialog.ets @@ -27,7 +27,7 @@ export interface InfDialog { show(): boolean; - hide(): void; + hide(): boolean; dismiss(): boolean; -- Gitee From abb94abe57ce202125d82cf6111f1465878d0d5a Mon Sep 17 00:00:00 2001 From: TickKiwi <> Date: Wed, 16 Apr 2025 11:44:19 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E5=B1=82=E7=BA=A7=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E9=81=AE=E7=BD=A9=E5=BC=B9=E7=AA=97=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=EF=BC=8C=E6=8F=90=E4=BE=9B=E7=9B=B8=E5=85=B3demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/pages/DialogLevelTest.ets | 213 +++++++++---------- 1 file changed, 99 insertions(+), 114 deletions(-) diff --git a/entry/src/main/ets/pages/DialogLevelTest.ets b/entry/src/main/ets/pages/DialogLevelTest.ets index 6e52ae6..f906ff6 100644 --- a/entry/src/main/ets/pages/DialogLevelTest.ets +++ b/entry/src/main/ets/pages/DialogLevelTest.ets @@ -1,4 +1,8 @@ -import { DialogAction, DialogHub, DialogStatus, InfCustomDialog, InfDialog, InfSheet } from '@hadss/dialoghub'; +import { DialogAction, + DialogConfig, + DialogHub, + DialogLifeCycle, + DialogStatus, InfCustomDialog, InfDialog, InfSheet } from '@hadss/dialoghub'; import { DHubLogger } from '@hadss/dialoghub/src/main/ets/log/DHubLogger'; import { CommonDialog } from '@hadss/dialoghub/src/main/ets/model/dialog/base/CommonDialog'; @@ -14,8 +18,7 @@ function dialog1(param: Dialog1Param) { Column() { TextInput({ placeholder: '请输入' }) - - Text('dialog 1') + Text('打开二级弹窗') .fontSize(24) .fontColor(Color.Red) .onClick(() => { @@ -30,7 +33,7 @@ function dialog1(param: Dialog1Param) { @Builder function dialog2() { Column() { - Text('dialog 2') + Text('二级弹窗') .fontSize(24) .fontColor(Color.Blue) } @@ -38,19 +41,37 @@ function dialog2() { .height(150) } +class MaskParam { + close: () => void = () => {}; +} + +@Builder +function maskDialog(param: MaskParam) { + Column() {} + .width('100%') + .height('100%') + .backgroundColor(Color.Transparent) + .onClick(() => { + console.log('testTag: mask clicked'); + param.close(); + }) +} + @Entry @Component struct DialogLevelTest { @State message: string = 'Hello World'; + maskDialog: InfCustomDialog | undefined = undefined; + dialogs: InfDialog[] = []; dialog1: InfCustomDialog | undefined = undefined; dialog2: InfCustomDialog | undefined = undefined; toastDialog: InfCustomDialog | undefined = undefined; popupDialog: InfCustomDialog | undefined = undefined; sheetDialog: InfSheet | undefined = undefined; - initDialog() { - DialogHub.init(this.getUIContext()); - this.dialog1 = DialogHub.getCustomDialog() + + initMaskDialog() { + this.maskDialog = DialogHub.getCustomDialog() .setConfig({ dialogBehavior: { isModal: true, @@ -59,29 +80,74 @@ struct DialogLevelTest { } }) .setStyle({ - borderColor: Color.Black, - borderWidth: 2 + maskBackgroundEffect: { radius: 40 }, + backgroundColor: Color.Transparent + }) + .setOperableContent(wrapBuilder(maskDialog), (dialogAction: DialogAction) => { + let maskParam = new MaskParam(); + maskParam.close = () => { + if (this.dialogs.length >= 1) { + this.dialogs[this.dialogs.length - 1].dismiss(); + } + } + return maskParam; }) - .setLifeCycleListener({ - onShow: () => { - setTimeout(() => { - let dialogs = DialogHub.getAllPageDialogs(); - if (dialogs.length >= 2) { - dialogs[1].hide(); + .build(); + } + + initDialog() { + DialogHub.init(this.getUIContext()); + this.initMaskDialog(); + let dialogConfig: DialogConfig = { + dialogBehavior: { + isModal: false, + passThroughGesture: false, + autoDismiss: false + } + }; + let lifeCycle: DialogLifeCycle = { + onWillShow: () => { + // 显示第一个弹窗时,先弹出遮罩弹窗 + if (this.dialogs.length == 0) { + this.maskDialog?.show(); + } + return true; + }, + onShow: () => { + setTimeout(() => { + let dialogs = DialogHub.getCurrentPageDialogs(); + if (dialogs.length - 1 > this.dialogs.length) { // dialog.length - 1, 因为dialogs包含遮罩弹窗 + // 显示二级弹窗时,关闭一级弹窗 + if (this.dialogs.length > 0) { + this.dialogs[this.dialogs.length - 1].hide(); } - }) - }, - onHide: () => { - console.log('testTag: dialog1 onHide called'); - }, - onWillHide: () => { - console.log('testTag: dialog1 onWillHide called'); - return true; - }, - onDismiss: () => { - console.log('testTag: dialog1 onDismiss called'); + this.dialogs.push(dialogs[0]); + } + // else { + // // 关闭二级弹窗时,显示一级弹窗 + // this.dialogs[this.dialogs.length - 1].hide(); + // } + }) + }, + onDismiss: () => { + console.log('testTag: dialogs length when dialog before dismiss: ', this.dialogs.length); + this.dialogs.pop(); + console.log('testTag: dialogs length when dialog dismiss: ', this.dialogs.length); + if (this.dialogs.length == 0) { + this.maskDialog?.dismiss(); + } else { + this.dialogs[this.dialogs.length - 1].show(); } + console.log('testTag: dialog onDismiss called'); + } + } + this.dialog1 = DialogHub.getCustomDialog() + .setConfig(dialogConfig) + .setStyle({ + borderColor: Color.Black, + borderWidth: 2 }) + .setLifeCycleListener(lifeCycle) .setOperableContent( wrapBuilder(dialog1), (dialogAction: DialogAction) => { let param = new Dialog1Param(() => { @@ -93,56 +159,8 @@ struct DialogLevelTest { } ).build(); this.dialog2 = DialogHub.getCustomDialog().setContent(wrapBuilder(dialog2)) - .setConfig({ - dialogBehavior: { - autoDismiss: true - } - }) - .setLifeCycleListener({ - onShow: () => { - setTimeout(() => { - let dialogs = DialogHub.getAllPageDialogs(); - if (dialogs.length >= 2) { - dialogs[1].hide(); - } - }) - }, - onHide: () => { - console.log('testTag: dialog2 onHide called'); - }, - onWillHide: () => { - console.log('testTag: dialog2 onWillHide called'); - return true; - }, - onDismiss: () => { - setTimeout(() => { - let dialogs = DialogHub.getAllPageDialogs(); - if (dialogs.length >= 1) { - dialogs[0].show(); - } - }) - } - }) - .build(); - - this.toastDialog = DialogHub.getToast().setTextContent('Toast') - .setDuration(10000).build(); - - this.popupDialog = DialogHub.getPopup().setTextContent('Popup') - .setComponentTargetId('popup') - .build(); - - this.sheetDialog = - DialogHub.getSheet().setContent(wrapBuilder(dialog2)) - .setComponentTargetId('sheet') - .setLifeCycleListener({ - onShow: () => { - console.log('testTag: sheet showed'); - }, - onHide: () => { - console.log('testTag: sheet hided'); - } - }) + .setConfig(dialogConfig) + .setLifeCycleListener(lifeCycle) .build(); } @@ -152,49 +170,16 @@ struct DialogLevelTest { } build() { - Column() { - Button('open 1') + Column({ space: 10 }) { + Button('打开一级弹窗') .onClick(() => { - // let param: Dialog1Param = new Dialog1Param(() => { - // if (this.dialog2) { - // this.dialog1?.hide(); - // this.dialog2.show(); - // } - // }) - // this.dialog1 - // if (!this.dialog1) { - this.initDialog(); - // } this.dialog1?.show(); }) - - Button('open toast') - .onClick(() => { - this.toastDialog?.show(); - setTimeout(() => { - this.toastDialog?.hide(); - }, 3000) - }) - Button('open popup') - .onClick(() => { - this.popupDialog?.show(); - // setTimeout(() => { - // this.popupDialog?.hide(); - // }, 3000) - }).id('popup') - Button('close popup') - .onClick(() => { - this.popupDialog?.hide(); - }) - - Button('open sheet') - .onClick(() => { - this.sheetDialog?.show(); - setTimeout(() => { - this.sheetDialog?.hide(); - }, 3000) + .margin({ + top: 20 }) } + // .justifyContent(FlexAlign.Center) .height('100%') .width('100%') .id('sheet') -- Gitee From 465912d1d13755d84430ca5436606e17fa904cee Mon Sep 17 00:00:00 2001 From: TickKiwi <> Date: Wed, 16 Apr 2025 14:30:52 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E6=8F=90=E4=BE=9B=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E9=A1=B5=E9=9D=A2=E6=89=80=E6=9C=89=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E7=9A=84=E6=8E=A5=E5=8F=A3getCurrentPageDialogsByStat?= =?UTF-8?q?us,=E4=BC=A0=E5=8F=82=E6=95=B0=E6=97=B6=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=9B=B8=E5=BA=94=E7=8A=B6=E6=80=81=E7=9A=84=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=EF=BC=8C=E5=90=8C=E5=B8=83=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Reference.md | 3 ++- entry/src/main/ets/pages/DialogLevelTest.ets | 6 +----- hadss_dialog/src/main/ets/model/DialogHub.ets | 4 ++-- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/docs/Reference.md b/docs/Reference.md index e56041e..4d423d7 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -41,7 +41,8 @@ | 方法名 | 类型 | 使用说明 | |----------------------------------|--------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | static init | (uicontext: UIContext) => void | 用于置顶默认的弹窗上下文,并且将弹窗绑定至特定页面 | -| static getCurrentPageDialogs | () => infDialog
(type: DialogType) => InfDialog[]
(modelName: string) => InfDialog[] | 根据弹窗类型,弹窗状态获取当前页面的弹窗;DEFAULT状态的弹窗不属于任何页面
数组返回的顺序按照最新show的在第一个元素; | +| static getCurrentPageDialogs | () => infDialog
(type: DialogType) => InfDialog[]
(modelName: string) => InfDialog[] | 根据弹窗类型,模板名称获取当前页面的弹窗;DEFAULT状态的弹窗不属于任何页面
数组返回的顺序按照最新show的在第一个元素; | +| static getCurrentPageDialogsByStatus | (status?: DialogStatus) => InfDialog[] | 根据弹窗状态,获取当前页面的弹窗;
数组返回的顺序按照最新show的在第一个元素; | | static dispatchBackPressToDialog | () => DialogBackPressResult | 向DialogHub的弹窗分发BackPress事件,即尝试关闭当前页面最上层的弹窗,并返回对应的结果;
说明:DialogHub弹出的弹窗默认不响应侧滑手势,有诉求的开发者可以在弹窗所在页面的onBackPress生命周期调用本方法模拟弹窗响应侧滑返回手势
(注:BindSheet类型弹窗会自动处理BackPress事件关闭弹窗,无需在OnBackPress中分发事件) | | static addEventListener | (listener: GlobalEvent) => void | 增加全局的弹窗事件监听 | | static removeEventListener | (listener: GlobalEvent) => void | 移除全局的弹窗事件监听 | diff --git a/entry/src/main/ets/pages/DialogLevelTest.ets b/entry/src/main/ets/pages/DialogLevelTest.ets index f906ff6..e5aa20c 100644 --- a/entry/src/main/ets/pages/DialogLevelTest.ets +++ b/entry/src/main/ets/pages/DialogLevelTest.ets @@ -115,7 +115,7 @@ struct DialogLevelTest { }, onShow: () => { setTimeout(() => { - let dialogs = DialogHub.getCurrentPageDialogs(); + let dialogs = DialogHub.getCurrentPageDialogsByStatus(); if (dialogs.length - 1 > this.dialogs.length) { // dialog.length - 1, 因为dialogs包含遮罩弹窗 // 显示二级弹窗时,关闭一级弹窗 if (this.dialogs.length > 0) { @@ -123,10 +123,6 @@ struct DialogLevelTest { } this.dialogs.push(dialogs[0]); } - // else { - // // 关闭二级弹窗时,显示一级弹窗 - // this.dialogs[this.dialogs.length - 1].hide(); - // } }) }, onDismiss: () => { diff --git a/hadss_dialog/src/main/ets/model/DialogHub.ets b/hadss_dialog/src/main/ets/model/DialogHub.ets index 4a3f221..f3531e4 100644 --- a/hadss_dialog/src/main/ets/model/DialogHub.ets +++ b/hadss_dialog/src/main/ets/model/DialogHub.ets @@ -289,8 +289,8 @@ export class DialogHub { .getCurrentPageDialogs(undefined, type, modelName, DialogStatus.SHOW) ?? []; } - static getAllPageDialogs(): InfDialog[] { - return AppLifeCycleHelper.getInstance(DialogHub.uiContext).getCurrentPageDialogs(undefined, undefined, undefined, undefined) ?? []; + static getCurrentPageDialogsByStatus(status?: DialogStatus) { + return AppLifeCycleHelper.getInstance(DialogHub.uiContext).getCurrentPageDialogs(undefined, undefined, undefined, status) ?? []; } static dispatchBackPressToDialog(): DialogBackPressResult { -- Gitee