HarmonyOS 鸿蒙Next 如何动态修改@CustomDialog里面的参数

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何动态修改@CustomDialog里面的参数

比如我的弹窗是一个TextTimer倒计时验证码,验证码计时完,text变成“重新发送”字样

2 回复

请参考以下示例:

[@CustomDialog](/user/CustomDialog)

struct CustomDialogExample {

 controller?: CustomDialogController

 [@State](/user/State) myTimerModifier: MyTextTimerModifier = new MyTextTimerModifier()

 textTimerController: TextTimerController = new TextTimerController()

 count:number = 1000*60

 [@State](/user/State) format: string = 'ss'

 [@State](/user/State) utc: number = 0

 [@State](/user/State) elapsedTime: number = 0

 cancel: () => void = () => {

 }

 confirm: () => void = () => {

 }

 build() {

   Column() {

     if ((Math.max(this.count / 1000 - this.elapsedTime))>0){

       TextTimer({isCountDown: true, count: this.count, controller: this.textTimerController})

         .contentModifier(this.myTimerModifier)

         .format(this.format)

         .onAppear(()=>{

           this.textTimerController.start()

         })

         .onTimer((utc: number, elapsedTime: number) => {

           this.elapsedTime = elapsedTime

           console.info('textTimer notCountDown utc is:' + utc + ', elapsedTime: ' + elapsedTime)

         })

     }else {

       Button('重新发送')

         .onClick(()=>{

           this.elapsedTime = 0

           this.textTimerController.start()

         })

     }

   }

 }

}

[@Entry](/user/Entry)

[@Component](/user/Component)

struct CustomDialogUser {

 dialogController: CustomDialogController | null = new CustomDialogController({

   builder: CustomDialogExample({

     cancel: ()=> { this.onCancel() },

     confirm: ()=> { this.onAccept() }

   }),

   cancel: this.existApp,

   autoCancel: true,

   onWillDismiss:(dismissDialogAction: DismissDialogAction)=> {

     console.info("reason=" + JSON.stringify(dismissDialogAction.reason))

     console.log("dialog onWillDismiss")

     if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {

       dismissDialogAction.dismiss()

     }

     if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {

       dismissDialogAction.dismiss()

     }

   },

   alignment: DialogAlignment.Center,

   offset: { dx: 0, dy: -20 },

   customStyle: false,

   cornerRadius: 20,

   width: 300,

   height: 200,

   borderWidth: 1,

   borderStyle: BorderStyle.Dashed,//使用borderStyle属性,需要和borderWidth属性一起使用

   borderColor: Color.Blue,//使用borderColor属性,需要和borderWidth属性一起使用

   backgroundColor: Color.White,

   shadow: ({ radius: 20, color: Color.Grey, offsetX: 50, offsetY: 0}),

 })

 // 在自定义组件即将析构销毁时将dialogController置空

 aboutToDisappear() {

   this.dialogController = null // 将dialogController置空

 }

 onCancel() {

   console.info('Callback when the first button is clicked')

 }

 onAccept() {

   console.info('Callback when the second button is clicked')

 }

 existApp() {

   console.info('Click the callback in the blank area')

 }

 build() {

   Column() {

     Button('click me')

       .onClick(() => {

         if (this.dialogController != null) {

           this.dialogController.open()

         }

       }).backgroundColor(0x317aff)

   }.width('100%').margin({ top: 5 })

 }

}

class MyTextTimerModifier implements ContentModifier<TextTimerConfiguration> {

 constructor() {

 }

 applyContent() : WrappedBuilder<[TextTimerConfiguration]>

 {

   return wrapBuilder(buildTextTimer)

 }

}

[@Builder](/user/Builder) function buildTextTimer(config: TextTimerConfiguration) {

 Column() {

   Text((Math.max(config.count / 1000 - config.elapsedTime )+'')).fontSize(22).fontColor(Color.Red)

     .width(100).height(40).borderRadius(10).borderColor(Color.Brown).backgroundColor(Color.Gray)

     .textAlign(TextAlign.Center)

 }

}

更多关于HarmonyOS 鸿蒙Next 如何动态修改@CustomDialog里面的参数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next中,动态修改@CustomDialog里面的参数可以通过以下方式实现:

  1. 获取Dialog实例:首先,确保你有一个方法来获取或持有@CustomDialog的实例。这通常是在你创建并显示对话框时完成的。

  2. 更新Dialog参数:一旦你有了Dialog的实例,你可以直接访问并修改其属性或内容。例如,如果你有一个自定义的TextView或Button在Dialog中,你可以通过Dialog实例获取这些组件并更新它们的文本或状态。

  3. 重新展示Dialog:如果Dialog已经显示,并且你修改了它的内容,你可能需要重新展示它以反映更改。这通常意味着你需要关闭当前的Dialog,然后重新创建并显示它,或者如果Dialog支持局部刷新,你可以调用相应的方法来更新界面。

  4. 注意事项:确保在修改Dialog参数时,Dialog的UI线程是活跃的,以避免潜在的线程安全问题。此外,如果Dialog包含复杂的布局或逻辑,考虑在修改参数前进行必要的检查,以避免崩溃或不一致的状态。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部