复现项目代码地址:https://github.com/peerless-hero/uniapp-bug/tree/darkmode-bug
- 发布:2026-03-24 22:48
- 更新:2026-04-01 10:06
- 阅读:269
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: windows11
手机系统: HarmonyOS NEXT
手机系统版本号: HarmonyOS 6.0.0
手机厂商: 华为
手机机型: Matepad 11.5s
页面类型: vue
vue版本: vue3
打包方式: 离线
项目创建方式: CLI
CLI版本号: 3.0.0-5000520260324001
示例代码:
操作步骤:
本机安装的 DevEco Studio 版本为 6.0.2.642
使用yarn安装复现项目依赖,配置好包名和调试证书,然后使用HBuildX5.04运行到鸿蒙真机
本机安装的 DevEco Studio 版本为 6.0.2.642
使用yarn安装复现项目依赖,配置好包名和调试证书,然后使用HBuildX5.04运行到鸿蒙真机
预期结果:
标题可在深色模式下显示白色;深色模式切换时HBuildX可看见日志(theme change, current is dark)。
标题可在深色模式下显示白色;深色模式切换时HBuildX可看见日志(theme change, current is dark)。
实际结果:
标题在深色模式下没有变化;深色模式切换时HBuildX没有切换日志。
标题在深色模式下没有变化;深色模式切换时HBuildX没有切换日志。
bug描述:
HBuildX5.04、5.05真机调试时鸿蒙APP深色模式样式显示和监听切换均存在问题。
HBuildX版本回退到4.87可以修复。
解决方案:
在App.vue文件内添加如下代码,激活APP环境下自适应系统深色模式
// #ifdef APP
plus.nativeUI.setUIStyle('auto')
// #endif
5 个回复
Ask小助手
作为DCloud官方人员,对这个bug反馈进行如下评审:
反馈质量评价
整体评价:优秀
这是一个信息完整、定位准确的bug反馈,具备以下优点:
内容完整性检查
uni.onThemeChange监听无回调两个问题Bug有效性分析
该Bug成立,依据如下:
知识库佐证:在对话知识库中检索到类似反馈,有用户报告"鸿蒙端按照文档配置darkmode: true,使用uni.getSystemInfoSync获取theme字段依然是undefined",官方人员确认"目前鸿蒙next还不支持深色模式"(针对非X版本),但后续提到"还不支持,得下个alpha了",暗示该功能正在开发或修复中
版本回归确认:用户明确指出5.04版本出现而4.87正常,这属于明确的版本回归问题。结合知识库中HBuilderX 5.0版本对
uni-text组件样式的调整记录,5.x版本确实在样式处理层面有较大改动平台特殊性:根据文档知识库,鸿蒙平台(HarmonyOS NEXT)与App(Android/iOS)是分开并立的,深色模式适配需要单独验证。结构化文档显示暗黑模式适配指南主要针对传统App平台,鸿蒙平台的深色模式支持可能存在滞后
建议与备注
临时解决方案:建议暂时使用HBuilderX 4.87版本进行鸿蒙开发,或关注后续alpha版本更新(根据对话记录,相关功能可能在后续alpha中修复)
验证参考:可参考插件市场中的hello-darkmode示例项目,验证深色模式在鸿蒙平台的正确配置方式
补充信息建议(可选):如能提供5.04版本与4.87版本生成的
theme.json文件差异对比,将更有助于定位问题根源该反馈符合高质量bug报告标准,建议纳入版本回归问题跟踪,优先处理鸿蒙平台深色模式适配异常。
DCloud_UNI_LXH
要改为
plus.nativeUI.setUIStyle('auto')无双的英雄 (作者)
现在的问题是你这种写法也没有效果;uni.onThemeChange根本无法触发。但回退HBuilderX 4.87版本二者都能恢复正常,你还是该排查下5.04到底改了什么
2026-03-30 16:08
无双的英雄 (作者)
目前只有鸿蒙系统受到影响,安卓、iOS等其他平台都没有此问题
2026-03-30 16:12
DCloud_UNI_LXH
回复 无双的英雄: 这块没有改动。没有效果吗?我测试是正常的。试试这个项目:https://ext.dcloud.net.cn/plugin?name=hello-darkmode
2026-03-30 16:28
DCloud_UNI_LXH
回复 DCloud_UNI_LXH: 如果你能用这个项目复现出你说的问题,那应该就是 bug 了。我刚测试了没问题,onThemeChange 正常触发、样式正常响应
2026-03-30 16:29
无双的英雄 (作者)
回复 DCloud_UNI_LXH: 你是用真机测试还是模拟器测试?除了描述中的平板,我还借了一台P80pro,运行到真机都不正常,然后用旧版本HBuilderX 4.87反倒正常了。这期间只修改了package.json有关uni的依赖保证cli版本能对应上。
2026-03-30 16:36
DCloud_UNI_LXH
回复 无双的英雄: 模拟器,使用我发你的这个项目测试:https://ext.dcloud.net.cn/plugin?name=hello-darkmode
2026-03-30 17:58
无双的英雄 (作者)
回复 DCloud_UNI_LXH: 我用真机和模拟器都测试了你给的这个项目,深色模式显示和切换确实都是正常的;但是我提供的复现项目还是不行,运行截图放下面了。我猜测可能只有cli项目会有此问题。
2026-03-30 22:10
无双的英雄 (作者)
在模拟器内开启深色模式下运行:
5.05
4.87
DCloud_UNI_LXH
我再测试下 cli 试试看,按说都是一样的
2026-03-31 10:07
DCloud_UNI_LXH
回复 DCloud_UNI_LXH: 我使用 5.05 测试了,没问题,需要添加
plus.nativeUI.setUIStyle('auto')这个不管什么版本 HBuilderX 都要加2026-03-31 11:26
无双的英雄 (作者)
回复 DCloud_UNI_LXH: 添加 plus.nativeUI.setUIStyle('auto') 算是解决了,但我建议最好修改下相关文章(见下方),避免后来人踩坑
2026-03-31 20:46
无双的英雄 (作者)
目前获取当前主题的文档(https://uniapp.dcloud.net.cn/tutorial/darkmode.html#get-theme)是这么描述的:
但是实测只能下来只能从osTheme字段获取,以下是uni.getSystemInfoSync 返回的完整结果:
事件监听
实测只有uni.onThemeChange可用,onThemeChange写在App.vue内也没有任何效果。
以下是精华文章(https://ask.dcloud.net.cn/article/36995)对plus.nativeUI的使用描述
但实测下来新版本 plus.nativeUI.setUIStyle('auto') 必须要写,否则监听函数和深色模式样式均任何没有效果。
DCloud_UNI_LXH
关于 systemInfo 返回的 theme 字段,鸿蒙特殊一些,只有 osTheme,我看下能不能加上
关于 onThemeChange 生命周期,已在文档上添加说明,这个其实是微信小程序的生命周期
plus.nativeUI.setUIStyle('auto') 这个一直是要写的
无双的英雄 (作者)
前两点没什么问题,就是第三点:
如果新版本以后要求APP环境下 plus.nativeUI.setUIStyle('auto') 必须要写,麻烦在文档(https://uniapp.dcloud.net.cn/tutorial/darkmode.html)重点标注一下。
2026-04-01 13:05
要回复问题请先登录或注册
公告
更多>相关问题