HarmonyOS CustomDialogController问题

请问CustomDialogController是否可以被自定义?

private dialogController= new CustomDialogController({  
  builder: ()=>bulider,  
  alignment : DialogAlignment.Bottom,  
  cornerRadius:8,  
  offset:{  
    dx:0,  
    dy:-20  
  }  
})

在使用controller的时候,自定义了弹窗样式,可是在使用的地方需要每次都New一个CustomDialogController,而且要配置很多属性,是否能够自定义一个DialogController提前把属性写成定值?

HarmonyOS
2024-10-15 12:48:44
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

在将属性写成定值的情况下:

方案一:如果弹框样式一致 ,建议封装为自定义组件,在使用的地方引入该组件,可传递参数。

方案二:在A页面创建CustomDialogController对象并保存至全局变量,可以在B页面或其他类内方法通过保存的全局变量,来操作弹窗,不可在使用的地方传递参数。

参考demo如下:

页面一:

import { router } from '@kit.ArkUI';  
@Entry  
@Component  
export struct Index {  
  aDialog: CustomDialogController = new CustomDialogController({  
    builder: ADialog({}),  
  });  
  build() {  
    Column() {  
      Button('点我跳转').onClick(() => {  
        //方案二,使用全局变量保存CustomDialogController对象  
        Params.aDialog = this.aDialog;  
        router.pushUrl({  
          url: "pages/Index5"  
        })  
      })  
    }.width('100%')  
    .height("100%")  
    .justifyContent(FlexAlign.Center)  
  }  
}  
@CustomDialog  
export struct ADialog {  
  controller: CustomDialogController = new CustomDialogController({  
    builder: ADialog({})  
  })  
  build() {  
    Column() {  
      Text('这是一个弹窗')  
    }.height('70%')  
    .width('100%')  
    .justifyContent(FlexAlign.Center)  
  }  
}  
//方案一 使用自定义组件封装自定义弹窗  
@Component  
export struct getDialogFromComp {  
  aDialog: CustomDialogController = new CustomDialogController({  
    builder: ADialog({}),  
  });  
  aboutToAppear(): void {  
    this.aDialog.open()  
  }  
  build() {  
  }  
}  
export class Params {  
  public static aDialog?: CustomDialogController;  
}

页面二:

import { getDialogFromComp, Params } from './Index4';  
import { promptAction } from '@kit.ArkUI';  
@Entry  
@Component  
struct Index5 {  
  @State message: string = 'Hello World';  
  @State flag: boolean = false;  
  build() {  
    Column() {  
      Button('点击出现弹窗').onClick(() => {  
        Params.aDialog?.open() //方案二  
      })  
    }  
    .justifyContent(FlexAlign.Center)  
    .height('100%')  
    .width('100%')  
  }  
}

将弹窗控制器CustomDialogController保存到全局变量后,可以在应用其他页面中调用打开。

分享
微博
QQ
微信
回复
2024-10-15 17:29:46
相关问题
HarmonyOS CustomDialogController组件问题
288浏览 • 1回复 待解决
HarmonyOS CustomDialogController如何封装
359浏览 • 1回复 待解决
HarmonyOS CustomDialogController套用Scroll
142浏览 • 1回复 待解决
HarmonyOS CustomDialogController 不显示
155浏览 • 1回复 待解决
CustomDialogController能否支持再次封装
658浏览 • 1回复 待解决
CustomDialogController禁用返回键
228浏览 • 1回复 待解决