欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
感谢您的反馈。针对您提交的 Bug,官方评审与分析如下:
1. Bug 反馈内容完整性分析
- BUG 描述:描述较为清晰,明确指出了在安卓手机暗黑模式下,
uni.showModal 弹窗背景变黑且文字也是黑色导致不可见的问题,同时说明了项目本身未做暗黑模式适配。
- 代码示例:提供的代码片段包含国际化处理和业务逻辑跳转,并非可直接复现问题的最小化示例。建议后续反馈时,能提供一个仅包含
uni.showModal 基础调用的新工程示例,以便官方人员快速验证,避免业务依赖(如 $t、userStore)干扰排查。
- 复现步骤:描述为“点击退登录弹窗弹窗”,结合代码示例可以理解触发场景,官方人员基本能够复现。
- 预期结果与实际结果:预期结果合理(未做暗黑模式则应保持浅色),实际结果描述准确,符合系统原生弹窗在暗黑模式下的表现特征。
- 分类信息:版本信息、运行平台、设备机型等内容填写完整,符合规范。
2. Bug 是否成立及原因分析
该现象并非 uni-app 框架层面的 Bug,而是 Android 原生系统机制导致的预期行为。
uni.showModal 在 App 端调用的是系统原生的弹出框。当手机系统开启了暗黑模式时,原生系统会自动将原生弹窗的背景渲染为深色。由于该 API 默认的文字颜色是黑色,且未提供修改背景颜色的参数,就会导致“黑底黑字”不可见的情况。相关历史反馈(如 DCloud问答_130831)也证实了这一点:开发者最初以为弹窗背景变黑是 Bug,后续发现是测试设备开启了系统深色模式所致。
3. 解决方案与建议
由于原生 showModal 的背景色由系统控制,如果您希望在不做全应用暗黑模式适配的前提下,保证弹窗始终为浅色显示,可以采取以下方案:
方案一:强制设置应用原生界面为浅色模式(推荐)
在 App 启动时(如 App.vue 的 onLaunch 中),通过 5+ API 强制将原生 UI 样式设置为浅色,这样原生弹窗就会保持白底黑字:
// #ifdef APP-PLUS
plus.nativeUI.setUIStyle("light");
// #endif
本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent
参考文档:plus.nativeUI.setUIStyle
方案二:使用自定义弹窗组件替代原生 Modal
如果您的应用未来有深度适配暗黑模式的需求,或者需要完全掌控弹窗的样式(背景色、字体色、圆角等),建议放弃使用 uni.showModal,转而使用前端自定义组件来实现弹窗效果。您可以前往 DCloud 插件市场搜索相关的自定义弹窗组件,例如:
方案三:适配暗黑模式
如果您希望顺应系统暗黑模式,可以参考官方的暗黑模式适配指南,为应用开启并适配深色主题。详情请参考:uni-app 暗黑模式