HarmonyOS 鸿蒙Next没法封装自定义弹窗?CustomDialogController不能写在class类中
HarmonyOS 鸿蒙Next没法封装自定义弹窗?CustomDialogController不能写在class类中
<markdown _ngcontent-qlo-c237="" class="markdownPreContainer">
用@CustomDialog自定义弹窗内容,旨在显示loading转圈
[@CustomDialog](/user/CustomDialog)
struct LoadingHUD {
private text?: string
controller: CustomDialogController = new CustomDialogController({
builder: LoadingHUD(),
})
build() {
Column() {
LoadingProgress()
.width('50vp')
.height('50vp')
if (this.text) {
Text(this.text)
}
}
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
一般很多地方都要用到loading转圈蒙层,如果每个页面都要写一串CustomDialogController的初始化,那也太麻烦了,如下:
[@Component](/user/Component)
struct LoginPage {
dialogController: CustomDialogController = new CustomDialogController({
builder: LoadingHUD({ text: ‘登录中’ }),
alignment: DialogAlignment.Center,
autoCancel: false,
customStyle: true,
cancel: () => {
}
})
build() {
Column() {
…
Button(‘登录’)
.onClick(() => {
this.dialogController.open()
})
…
}
.width(‘100%’).height(‘100%’)
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
想在自定义类里面封装CustomDialogController,虽然编译不报错,但是调用ProgressHUD.dialogController.open()却毫无反应。 想继承CustomDialogController类更会导致程序崩溃,真莫名其妙。
class ProgressHUD {
// 自定义弹窗controller
private static dialogController: CustomDialogController = new CustomDialogController({
builder: LoadingHUD({ text: this._text }),
alignment: DialogAlignment.Center,
autoCancel: true,
customStyle: true,
cancel: () => {
}
})
private static _text?: string
static showLoading(text?: string) {
ProgressHUD._text = text
ProgressHUD.dialogController.open()
}
static close() {
ProgressHUD.dialogController.close()
}
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>
鸿蒙封装组件太难了,很多应该支持的却不支持,有时候要绕多次弯才能勉强实现,有些场景却怎么也实现不了,设计真是一言难尽,做鸿蒙开发太难了。
</markdown>是的,这个我有看到。我就是吐槽这个限制,限制了我们封装公共组件。
你好,请问你web侧调用原生弹框成功了吗
哪里可以看到指南
可以封装,这样封装:
export default function IOSActionSheet(sheets:Sheet[]):CustomDialogController{
return new CustomDialogController({
alignment: DialogAlignment.Bottom,
customStyle:true,
offset:{dx:0, dy: -30},
maskColor:"#88000000",
builder: IOSActionSheetView({
sheets
})
});
}
调用的时候要注意.bind(this):
let as:CustomDialogController = IOSActionSheet.bind(this)([{
title:'拷贝本条',
action: async (t:string)=>{
let pasteData: pasteboard.PasteData =
pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, d.rtext);
await pasteboard.getSystemPasteboard().setData(pasteData);
promptAction.showToast({
message: '已复制到剪贴板!'
})
as.close();
}
},{
title:'拷贝本章全部内容',
action: (t:string)=>{}
},{
title:'拷贝全部结果',
action: (t:string)=>{}
}]);
as.open();
})
在HarmonyOS(鸿蒙)系统中,如果你遇到CustomDialogController
不能直接在class类中定义的问题,这通常是因为你可能没有正确设置其上下文环境或者该类没有被正确地继承或实现必要的接口。确保你的类继承自合适的DialogController基类,并在构造函数中正确传递了Activity的Context。
同时,检查你的CustomDialogController
类中是否包含了所有必要的生命周期和UI构建逻辑。如果CustomDialogController
是自定义的,请确保它的实现符合鸿蒙系统的UI框架规范。
如果问题依旧没法解决请加我微信,我的微信是itying888。