当前位置: 首页 > news >正文

弹窗库:Toast、Loading、ActionSheet的统一封装(244)

在鸿蒙(HarmonyOS)应用开发中,系统自带的AlertDialog往往样式单一,而频繁手写CustomDialog又会导致代码冗余。为了实现 Toast、Loading、ActionSheet 的统一封装,目前业界主要有两种主流方案:引入成熟的第三方库基于原生 API 进行高阶自定义封装

方案一:引入成熟的第三方库(推荐,开箱即用)

鸿蒙生态中已有非常优秀的零侵入弹窗库,例如@pura/harmony-dialog。它仅需一行代码即可实现各种弹窗,极大提升了开发效率。

1. 安装与全局初始化

ohpm install @pura/harmony-dialog

必须在EntryAbilityonCreate生命周期中初始化上下文,否则调用会报错:

import { DialogUtil } from '@pura/harmony-dialog'; export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.UIAbilityLaunchParam): void { DialogUtil.init(this.context); } }

2. 统一调用示例

import { DialogUtil } from '@pura/harmony-dialog'; // 1. Toast 轻量提示 DialogUtil.toast('操作成功'); // 2. Loading 加载状态(网络请求时使用) DialogUtil.loading('加载中...'); // 请求结束后关闭 DialogUtil.hideLoading(); // 3. ActionSheet 底部菜单 DialogUtil.actionSheet(['拍照', '从相册选择'], (index: number) => { console.log('选择了第', index, '项'); });

注:该库还支持弹窗队列,多个弹窗依次显示不会互相覆盖,非常适合批量提示场景。


方案二:基于原生 API 的高阶自定义封装

如果项目对 UI 样式有极高的定制要求,或者不希望引入第三方依赖,可以基于鸿蒙最新的UIContext.getPromptAction.openCustomDialog进行全局解耦封装。

核心设计思路:

  1. 页面解耦:使用openCustomDialog代替传统的CustomDialogController,实现全局任意位置调用,无需在页面中绑定组件。
  2. 状态双向绑定:使用$$语法进行布尔值绑定,确保弹窗能正确关闭。
  3. 单例模式:封装一个DialogService统一调度。

1. 封装全局 Toast(利用 setTimeout 自动关闭)

@Builder function buildToast(params: { text: string }) { Text(params.text) .fontSize(16) .fontColor(Color.White) .padding(12) .backgroundColor('#CC000000') .borderRadius(8) } export class DialogService { static showToast(text: string, duration: number = 2000) { const uiContext = AppStorage.get<UIContext>('uiContext')!; const dialog = uiContext.getPromptAction().openCustomDialog( wrapBuilder(buildToast), { data: { text: text } } ); // 定时自动关闭 setTimeout(() => { dialog.close(); }, duration); } }

2. 封装通用 Loading 与 ActionSheet
同样地,将 Loading 的转圈动画(如LoadingProgress)和 ActionSheet 的列表布局封装为@Builder,通过openCustomDialog唤起。对于 Loading,可以通过暴露一个close()方法供业务层在异步请求结束后手动关闭。


鸿蒙弹窗选型决策树

在统一封装时,建议根据业务场景自动匹配最合适的底层 API:

  • 纯反馈提示(如保存成功):使用Toast
  • 二次确认(如删除操作):使用showDialogAlertDialog
  • 底部选项/动作面板:使用ActionSheetbindSheet
  • 自定义复杂 UI 弹窗:使用openCustomDialog
  • 全屏遮罩/半模态:使用bindContentCoverbindSheet
http://www.jsqmd.com/news/1250475/

相关文章:

  • img的srcset属性的作⽤?
  • 正规GEO(SEO)优化公司类型 避坑指南:SEO与GEO融合期各类服务商类型全解析 - GEORANK
  • 多模态大模型简介
  • 口碑好的含金物料出售企业排名
  • 用 WorkBuddy 批量整理文件时,怎样避免“做完了却不能交付”?
  • 这个 App 明天就要上线了
  • 北京旅游出行服务企业做GEO服务商怎么选?2026年五家代表性机构靠谱选型指南 - 小随科技
  • 2026年南京搬家公司/企业搬迁/设备搬运/大件搬运/家具拆装/长途货运公司推荐:南京退伍老兵搬家公司 - 品牌发掘
  • 西安知名税务合规律师郑艳玲团队告诉你2026年十大高发公司法律问题榜单 - 西安潮头条
  • 复现论文代码反复报错?一套基于原文对照与变量溯源的实验 Debug 方法论(含工具选型)
  • 2026太原服务好的防水补漏公司严选推荐 专业防水公司排名推荐(2026年7月防水补漏最新TOP权威排名) - 鼎万建筑修缮
  • AI论文写作工具测评与学术诚信指南
  • 从传统架构到超融合:深圳联众合18年实战经验,助企业构建稳定、安全、高效的IT基础设施
  • UVM验证平台的死亡陷阱:从入门到放弃的那些坑
  • GoF设计模式——访问者模式
  • 全球30米耕地数据,通过全球土地覆盖产品与Landsat数据融合而成
  • 北京工业设备服务企业做GEO服务商怎么选?2026年深度测评与靠谱选型指南 - 科技快讯
  • 北京自动化解决方案企业做GEO服务商怎么选?2026年靠谱选型指南与五家服务商深度拆解 - 小随科技
  • 椰林海鲜码头企业新愿景是什么?:心诚固本兴邦 - 17728181569
  • 2026大连市防水补漏口碑不错的公司实测推荐 专业防水公司排名推荐(2026年7月防水补漏最新TOP权威排名) - 鼎万建筑修缮
  • 基于YOLO与PySide6的植物病害检测系统开发指南
  • 深耕南京,领跑AI搜索时代:答序科技如何以诊断型GEO重构品牌增长逻辑 - 天涯视角
  • 青岛工程款起诉律师于臻:施工方决定打官司前应准备什么 - 新思维商业观察
  • 大型SEO服务商 中小企业SEO外包机构对比:GEO时代不同规模SEO服务商适配策略 - GEORANK
  • CSharp:Backtracking Algorithm
  • 商标品牌赋能寒地通信企业——注册品牌 MUKONI 与LONPTT 的品牌建设之路
  • 保姆级教程|Loki+Promtail+Grafana 集成Zabbix 7,统一日志监控门户(全套配置附)
  • label标签有什么用?
  • HarmonyOS7 属性动画基础:animateTo 驱动透明度与位移动画
  • 神秘分治 学习笔记