在HarmonyOS NEXT开发中CustomDialogController一直是undefined?

在HarmonyOS NEXT开发中CustomDialogController一直是undefined?

@Component 
export struct DialogBug { 
  dialogController: CustomDialogController = new CustomDialogController({ 
    builder: getPublishWidgetBuilder().builder, 
    cornerRadius: 0, 
    customStyle: true, 
    alignment: DialogAlignment.Center, 
    maskColor: 0x77000000 
  }) 
 
  build() { 
    Column() { 
      Button(‘ 
      open’ 
      ) 
      . 
      onClick(() => { 
        this.dialogController.open() 
      }) 
    } 
    .margin({ top: 200 }) 
  } 
} 
 
function getPublishWidgetBuilder(): WrappedBuilder<[]> { 
  return wrapBuilder(DialogBuilder) 
} 
 
@Builder 
function DialogBuilder() { 
  Mydialog() 
} 
 
@Component 
@CustomDialog 
struct Mydialog { 
  dialogController?: CustomDialogController 
 
  build() { 
    Column() { 
      Button(‘ 
      close’ 
      ). 
      onClick(() => { 
        this.dialogController?.close() 
      }) 
 
    } 
  } 
}

补充说明:Mydialog中使用new CustomDialogController方式,dialog依然无法关闭

阅读 1.1k
1 个回答

请参考如下修改:

@Entry 
@Component 
struct Test5 { 
  build() { 
    Column() { 
      DialogBug() 
    } 
  } 
} 
 
@Component 
export struct DialogBug { 
  dialogController: CustomDialogController = new CustomDialogController({ 
    //builder: getPublishWidgetBuilder().builder, 
    builder: Mydialog(), 
    cornerRadius: 0, 
    customStyle: true, 
    alignment: DialogAlignment.Center, 
    maskColor: 0x77000000 
  }) 
 
  build() { 
    Column() { 
      Button('open').onClick(() => { 
        this.dialogController.open() 
      }) 
    } 
    .margin({ top: 200 }) 
  } 
} 
 
function getPublishWidgetBuilder(): WrappedBuilder<[]> { 
  return wrapBuilder(DialogBuilder) 
} 
 
@Builder 
function DialogBuilder() { 
  Mydialog() 
} 
 
@Component 
@CustomDialog 
struct Mydialog { 
  dialogController?: CustomDialogController 
 
  build() { 
    Column() { 
      Button('close').onClick(() => { 
        if (this.dialogController != undefined) { 
          this.dialogController.close() 
        } 
        console.info('dialogController is undefined') 
      }) 
 
    } 
  } 
}