自定义弹窗的控制器(CustomDialogController)如何封装在普通class中

目前应用中有个全局通用弹窗,因为涉及的页面很多,计划封装一个弹窗工具类,但是CustomDialogController定义在工具类中无法拉起弹窗,只有定义在页面中才能拉起弹窗

HarmonyOS
2024-04-29 22:32:55
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
开心的兔子

可以参考以下步骤:

1.封装1个弹框实例类CustomDialogLayou.ets

@CustomDialog 
export struct CustomDialogLayout { 
controller?: CustomDialogController 
 
build() { 
Column() { 
Text('Global Custom Dialog Test') 
} 
.justifyContent(FlexAlign.Center) 
.alignItems(HorizontalAlign.Center) 
.height(400) 
} 
}

2.在window的入口page(比如Index.ets)里import并创建实例

import { CustomDialogLayout } from './CustomDialogLayout' 
dialogController: CustomDialogController | null = new CustomDialogController({ 
builder: CustomDialogLayout({ 
}), 
cancel: this.onCancel, 
autoCancel: true, 
alignment: DialogAlignment.Center, 
})

3.在MainAbility.ts的onCreate方法里通过AppStorage定义关于弹框显示的全局属性,默认false不显示

AppStorage.setOrCreate('showGlobalCustomDialog', false)

4.在Index.ets里监听此属性值改变并进行拉起动作

@StorageLink('showGlobalCustomDialog') @Watch('globalCustomDialogStateChange') showGlobalCustomDialog: boolean = false 
 
globalCustomDialogStateChange() { 
if (this.showGlobalCustomDialog) { 
if (this.dialogController != null) { 
this.dialogController.open() 
AppStorage.setOrCreate('showGlobalCustomDialog', false) 
} 
} 
}

5.在需要调用的页面设置全局属性为true即可调起弹框

AppStorage.setOrCreate('showGlobalCustomDialog', true)
分享
微博
QQ
微信
回复
2024-04-30 21:12:27
相关问题
HarmonyOS video空间自定义控制器
299浏览 • 1回复 待解决
如何封装全局性自定义弹窗
306浏览 • 1回复 待解决
HarmonyOS 关于自定义弹窗封装调用
390浏览 • 2回复 待解决
HarmonyOS 自定义弹窗封装后不显示
336浏览 • 1回复 待解决
如何自定义弹窗再次弹窗
2267浏览 • 1回复 待解决
自定义弹窗如何进一步封装
399浏览 • 1回复 待解决
自定义日期滑动选择弹窗
404浏览 • 1回复 待解决
自定义弹窗自定义转场动画
1128浏览 • 1回复 待解决