鸿蒙next arkts 脱离UI通用dialog弹窗实现

138 阅读1分钟

最核心的代码

window.getLastWindow(getContext()).then((view) => {
 let node = new ComponentContent(view.getUIContext(), wrapBuilder(customDialogBuilder), "123")
 view.getUIContext().getPromptAction().openCustomDialog(node)
});
@Builder
export function customDialogBuilder(text:string) {
 Stack() {
   // Image($r("app.media.bg_alert_new")).width("100%").height("50%").alignSelf(ItemAlign.Start)
   Column() {

     Text(text).fontSize(20).margin({bottom:10, top: 10})


   }.padding(20).borderRadius(15).clip(true)
 }


}

如果全局只有一个 window 那可以在 EntryAbility中将最上层window的uicontent给缓存起来

onWindowStageCreate(windowStage: window.WindowStage): void {
    let ctx = 
windowStage.getMainWindowSync().getUIContext()
        
        ctx 存到全局一个变量内即可,
        使用时直接获取

}