HarmonyOS 鸿蒙Next 自定义弹窗如何获取显示状态
HarmonyOS 鸿蒙Next 自定义弹窗如何获取显示状态
使用CustomDialogController建立自定义弹窗,controller只有open close两个方法,想咨询一下,如何获取dialog的isShowing状态呢?或者有其他办法避免重复弹窗吗?
场景描述:
隐私弹窗,点击后会跳转隐私协议,跳转时发现跳转后弹窗还存在最上层,所以在跳转时关闭了弹窗,返回闪屏,通过pageshow钩子判断展示弹窗,但可能造成多次弹出。
场景描述:
隐私弹窗,点击后会跳转隐私协议,跳转时发现跳转后弹窗还存在最上层,所以在跳转时关闭了弹窗,返回闪屏,通过pageshow钩子判断展示弹窗,但可能造成多次弹出。
        
          2 回复
        
      
      
        官方是没有获取dialog的isShowing状态的。可以自定义一个boolean来存储显示状态。 以下是写的demo参考:
@CustomDialog
struct CustomDialogExample {
  cancel?: () => void
  confirm?: () => void
  controller: CustomDialogController
  build() {
    Column() {
      Text('我是内容').fontSize(20).margin({ top: 10, bottom: 10 })
      Flex({ justifyContent: FlexAlign.SpaceAround }) {
        Button('cancel')
          .onClick(() => {
            this.controller.close()
            if (this.cancel) {
              this.cancel()
            }
          }).backgroundColor(0xffffff).fontColor(Color.Black)
        Button('confirm')
          .onClick(() => {
            this.controller.close()
            if (this.confirm) {
              this.confirm()
            }
          }).backgroundColor(0xffffff).fontColor(Color.Red)
      }.margin({ bottom: 10 })
    }
  }
}
@Entry
@Component
struct Index {
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({
      cancel: ()=> { this.onCancel() },
      confirm: ()=> { this.onAccept() },
    }),
    autoCancel:true,
    cancel: ()=> { this.onCancel()},
  })
  @State @Watch('dialogIsOpen') isOpen:boolean = false
  dialogIsOpen(propName: string):void {
    console.log('isOpen:',this.isOpen?1:0)
  }
  onCancel() {
    this.isOpen = false
    console.info('Callback when the first button is clicked')
  }
  onAccept() {
    this.isOpen = false
    console.info('Callback when the second button is clicked')
  }
  build() {
    Column() {
      Button('click me')
        .onClick(() => {
          this.dialogController.open()
          this.isOpen = true
        })
    }.width('100%').margin({ top: 5 })
  }
}
更多关于HarmonyOS 鸿蒙Next 自定义弹窗如何获取显示状态的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,自定义弹窗的显示状态并非直接通过API获取,但可以通过自定义逻辑来管理。
由于CustomDialogController只提供了open和close方法,并未直接提供isShowing状态查询,开发者可以定义一个boolean变量来跟踪弹窗的显示状态。例如,在打开弹窗时将变量设置为true,在关闭弹窗时将变量设置为false。
此外,还可以利用事件监听或回调机制来更新这个状态变量。例如,在弹窗的onDidAppear和onDidDisappear回调中更新状态,以确保状态与弹窗的实际显示情况一致。
这种方法虽然需要手动管理状态,但能够灵活地控制弹窗的显示和隐藏,并满足大多数应用场景的需求。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。
        
      
                  
                  
                  
