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中,自定义弹窗的显示状态并非直接通过API获取,但可以通过自定义逻辑来管理。
由于CustomDialogController只提供了open和close方法,并未直接提供isShowing状态查询,开发者可以定义一个boolean变量来跟踪弹窗的显示状态。例如,在打开弹窗时将变量设置为true,在关闭弹窗时将变量设置为false。
此外,还可以利用事件监听或回调机制来更新这个状态变量。例如,在弹窗的onDidAppear和onDidDisappear回调中更新状态,以确保状态与弹窗的实际显示情况一致。
这种方法虽然需要手动管理状态,但能够灵活地控制弹窗的显示和隐藏,并满足大多数应用场景的需求。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。