自定义弹窗的控制器(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空间自定义控制器
199浏览 • 1回复 待解决
如何封装全局性自定义弹窗
205浏览 • 1回复 待解决
HarmonyOS 关于自定义弹窗封装调用
202浏览 • 2回复 待解决
HarmonyOS 自定义弹窗封装后不显示
190浏览 • 1回复 待解决
如何自定义弹窗再次弹窗
2109浏览 • 1回复 待解决
自定义弹窗如何进一步封装
310浏览 • 1回复 待解决
如何理解自定义弹窗gridCount参数
2114浏览 • 1回复 待解决
自定义日期滑动选择弹窗
279浏览 • 1回复 待解决
自定义弹窗自定义转场动画
896浏览 • 1回复 待解决
自定义弹窗变量如何传递给页面
2480浏览 • 1回复 待解决
什么是控制器controller
732浏览 • 1回复 待解决
自定义弹窗如何嵌套使用
1407浏览 • 1回复 待解决
如何自定义popup弹窗布局?
355浏览 • 2回复 待解决