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

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

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

可以参考以下步骤:

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
相关问题
如何自定义弹窗再次弹窗
319浏览 • 1回复 待解决
自定义弹窗变量如何传递给页面
530浏览 • 1回复 待解决
如何理解自定义弹窗gridCount参数
504浏览 • 1回复 待解决
如何设置自定义弹窗位置
367浏览 • 1回复 待解决
如何去除自定义弹窗白色背景
377浏览 • 1回复 待解决
如何自定义Video组件控制栏样式
512浏览 • 1回复 待解决
如何封装一个自定义Dialog对话框
450浏览 • 1回复 待解决
自定义弹窗大小如何自适应内容
451浏览 • 1回复 待解决
是否支持自定义装饰
329浏览 • 1回复 待解决
自定义组件如何添加图片?
857浏览 • 1回复 待解决
json字符串与自定义class结构转换
218浏览 • 1回复 待解决
弹窗打开、关闭动画是否支持自定义
412浏览 • 1回复 待解决
ArkTS是否支持自定义装饰
145浏览 • 1回复 待解决
如何在全局实现一个自定义dialog弹窗
583浏览 • 1回复 待解决
鸿蒙如何自定义字体文件
17428浏览 • 1回复 待解决