在官方文档中,创建自定义弹窗是比较麻烦的,使用方式大概是:
1、使用@CustomDialog装饰的自定义组件作为弹窗的布局
2、在@CustomDialog装饰的自定义组件中必须声明CustomDialogControlle类型的变量
3、在需要显示弹窗的@Entry里面再次声明一个CustomDialogControlle类型的变量,并完成初始化
这样就可以通过@Entry里的CustomDialogControlle类型的变量进行控制弹窗的关闭和打开,但无法得知该弹窗打开/关闭状态。
开发过Android的小伙伴,已经熟悉了在哪里调用就在那里new一个Dialog直接弹出来的使用方式。所以为了迎合自己的使用习惯,就利用promptAction写了一个基类,实现这种调用方式。
第一步:创建基类
import { BusinessError } from '@kit.BasicServicesKit';
import { ComponentContent } from '@ohos.arkui.node';
import { uiObserver } from '@kit.ArkUI';
export abstract class BaseDialog<T extends object> {
protected context: UIContext | null = null
protected componentContent: ComponentContent<T> | null = null
//是否允许点击三键back、左滑/右滑、键盘ESC的方式关闭弹窗
protected isPressBackClose: boolean = true
//是否允许点击遮障层的方式关闭弹窗
protected isTouchOutsideClose: boolean = true
//是否允许点击关闭按钮的方式关闭弹窗
protected isCloseButtonClose: boolean = true
//蒙层颜色
protected maskColor?: ResourceColor
//弹窗的位置
protected alignment?: DialogAlignment;
//弹窗是否已打开
public isOpen: boolean = false
constructor(context: UIContext) {
this.context = context
//监听UIContext的生命周期,在即将销毁时,关闭弹窗并
this.context.getUIObserver()
.off("routerPageUpdate", (routerPageInfo) => {


1015

被折叠的 条评论
为什么被折叠?



