HarmonyOS 鸿蒙Next 自定义弹窗如何获取显示状态

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

HarmonyOS 鸿蒙Next 自定义弹窗如何获取显示状态

使用CustomDialogController建立自定义弹窗,controller只有open close两个方法,想咨询一下,如何获取dialog的isShowing状态呢?或者有其他办法避免重复弹窗吗?
场景描述:
隐私弹窗,点击后会跳转隐私协议,跳转时发现跳转后弹窗还存在最上层,所以在跳转时关闭了弹窗,返回闪屏,通过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中,自定义弹窗的显示状态并非直接通过API获取,但可以通过自定义逻辑来管理。

由于CustomDialogController只提供了open和close方法,并未直接提供isShowing状态查询,开发者可以定义一个boolean变量来跟踪弹窗的显示状态。例如,在打开弹窗时将变量设置为true,在关闭弹窗时将变量设置为false。

此外,还可以利用事件监听或回调机制来更新这个状态变量。例如,在弹窗的onDidAppear和onDidDisappear回调中更新状态,以确保状态与弹窗的实际显示情况一致。

这种方法虽然需要手动管理状态,但能够灵活地控制弹窗的显示和隐藏,并满足大多数应用场景的需求。

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

回到顶部