HarmonyOS 鸿蒙Next CustomDialogController一定要搞得这么难用吗?

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

HarmonyOS 鸿蒙Next CustomDialogController一定要搞得这么难用吗?

“CustomDialogController仅在作为@CustomDialog@Component struct的成员变量,且在@Component struct内部定义时赋值才有效”

这不是意味着全局的自定义弹框根本用不了?打个比方,定义一个路由,统一调用router.push方法并且处理错误,在错误里自定义弹窗提示,这怎么搞?

13 回复
一开始没留意【CustomDialogController仅在作为[@CustomDialog](/user/CustomDialog)和[@Component](/user/Component) struct的成员变量,且在[@Component](/user/Component) struct内部定义时赋值才有效】这句话,在方法内部调用一直无效,@
CustomDialog里的CustomDialogController一直是undefined,非常变扭
实测在封装的类中调用 AlertDialog.show() 可以弹出警告,包括路由出错时使用此方式;封装的类可单独 export 全局使用。而 CustomDialogController 不行,虽然编译可过但运行时直接闪退,估计是较重组件,需要挂接在组件树上才可支持。

但是使用 AlertDialog有个问题就是样式无法设置,如果需要错误是红色字体或红色弹窗背景,成功说另外的颜色。或者想要加个icon,完全无法实现

那就考虑自建子Window来做弹窗,搜搜论坛里好像有人做过了。

说出了我的心声~ 

我也很费解
感觉很多思路需要转换
太tm难用了,哪位大佬有封装好基于window的Dialog吗
假如页面有30个弹框,就得有30个
CustomDialogController。。。简直了。。。。。。。

其实问题的症结在于:AlertDialog,Toast 可以在任意非ui的地方通过简单的初始化和调用就可以弹窗,但是CustomDialogController的创建和使用却限制在UI Component里面实例化和使用,实际场景确实很不方便。

参考Android的实现,Dialog只需要传入Activity的Context,可以创建单独的Window来实现弹窗,不限制在什么地方使用,这里猜测鸿蒙的AlertDialog,Toast类似这种实现(使用简单,但是不能自定义UI样式);但是CustomDialog的实现却不知道为什么不走这条路,大大增加开发者的成本,甚至很多人都自己通过创建subWindow的形式另辟蹊径,既然论坛呼声这么高,不知道官方接下来是否会优化自定义弹窗的实现和使用

HarmonyOS的CustomDialogController在使用时确实可能遇到一些挑战,这主要是由于其复杂的生命周期和绑定要求。确保CustomDialogController正确绑定到UI组件,并处理好其生命周期管理是关键。如果在使用中遇到困难,可以尝试查看官方文档或社区中的相关讨论,这些资源通常能提供详细的指导和解决方案。如果问题依旧没法解决,请加我微信,我的微信是itying888,我会尽力提供帮助。

回到顶部