HarmonyOS 鸿蒙Next openCustomDialog,如何判断是否弹出

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next openCustomDialog,如何判断是否弹出

BlessDialogUtil.pro.openCustomDialog(BlessDialogUtil.blessDialog, { alignment: DialogAlignment.Center, isModal: true, autoCancel: false } )

3 回复

当前没有api可以获取openCustomDialog弹出状态,因为弹出dialog组件是可以设置不同的,所以判断openCustomDialog是否弹出,没有意义。

如果非要判断,可以通过openCustomDialog的生命周期回调进行判断。

示例:

import { promptAction } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Component
struct Index {
  private customDialogComponentId: number = 0
  // 弹窗状态
  @State dialogStatus: boolean = false;

  @Builder
  customDialogComponent() {
    Column() {
      Text('弹窗').fontSize(30)
      Row({ space: 50 }) {
        Button("确认").onClick(() => {
          try {
            promptAction.closeCustomDialog(this.customDialogComponentId)
          } catch (error) {
            let message = (error as BusinessError).message;
            let code = (error as BusinessError).code;
            console.error(`closeCustomDialog error code is ${code}, message is ${message}`);
          }
        })
        Button("取消").onClick(() => {
          try {
            promptAction.closeCustomDialog(this.customDialogComponentId)
          } catch (error) {
            let message = (error as BusinessError).message;
            let code = (error as BusinessError).code;
            console.error(`closeCustomDialog error code is ${code}, message is ${message}`);
          }
        })
      }
    }.height(200).padding(5).justifyContent(FlexAlign.SpaceBetween)
  }

  build() {
    Row() {
      Column({ space: 20 }) {
        Text('组件内弹窗')
          .fontSize(30)
          .onClick(() => {
            promptAction.openCustomDialog({
              builder: () => {
                this.customDialogComponent()
              },
              onDidAppear: () => {
                this.dialogStatus = true;
                console.log('弹框弹出')
              },
              onDidDisappear: () => {
                this.dialogStatus = false;
                console.log('弹框消失')
              }
            }).then((dialogId: number) => {
              this.customDialogComponentId = dialogId
            })
              .catch((error: BusinessError) => {
                console.error(`openCustomDialog error code is ${error.code}, message is ${error.message}`)
              })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next openCustomDialog,如何判断是否弹出的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


生命周期参考文档:生命周期

在HarmonyOS(鸿蒙)系统中,对于openCustomDialog方法的使用,若需要判断是否已弹出对话框,通常可以通过以下几种方式实现,但这些方式并不直接依赖于系统API提供的明确“是否弹出”的状态查询,因为鸿蒙API设计中可能未直接暴露此类状态。以下是一种常见的设计思路:

  1. 状态标志位:在调用openCustomDialog之前,设置一个全局或类的成员变量作为状态标志位,如isDialogOpen,初始化为false。在对话框打开(或尝试打开)后,将此标志位设置为true。关闭对话框时,再将其设置为false

  2. 对话框引用:保持对CustomDialog对象的引用,通过检查该对象是否存在以及是否处于显示状态来间接判断对话框是否弹出。不过,直接检查显示状态可能需要依赖于对话框内部的具体实现或状态管理。

  3. 事件监听:为对话框的打开和关闭事件设置监听器,通过监听这些事件来更新状态标志位。

请注意,上述方法依赖于开发者对对话框的管理和控制逻辑。由于鸿蒙系统的具体API和实现细节可能有所不同,实际使用时需参考最新的鸿蒙开发文档。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部