在移动应用开发中,如果你还在为主题切换 和暗黑模式 适配而烦恼,那 uView Pro 0.4.x 会让你眼前一亮。我们不仅带来了强大的多主题系统,还贴心地提供了一个可视化的主题生成工具------让"主题自定义"从代码黑洞变成点点鼠标就能完成的事。
目前 uView Pro 0.4.1 已正式发布,一站式主题采购器震撼上线,解锁多主题与暗黑模式!
uView Pro 相关开源地址如下:
- GitHub:github.com/anyup/uview...
- Gitee:gitee.com/anyup/uview...
- Npm:www.npmjs.com/package/uvi...
- 插件市场:ext.dcloud.net.cn/plugin?id=2...
- 官网(牢记):uviewpro.cn/
前言:主题定制的痛点
想象一下这样的场景:
- 🎨 设计师要求一套新的配色方案
- 🌙 产品经理要求支持暗黑模式
- 📱 不同客户需要不同的品牌色
- 💪 前端工程师需要手动维护几十个 SCSS 变量
传统的方式是什么?在 SCSS 文件里一个一个改颜色值,然后祈祷不要改错。每次改动都要重新编译,等待测试反馈。这就是 0.3.x 时代的真实写照。
0.4.x 来了,一切都变了。

一. 核心升级:从"手工坊"到"智能工厂"
1. 多主题系统:不再是单一配色
在 0.3.x,你只能有一套主题。现在,0.4.x 支持无限个主题。
想象你是一个 SaaS 平台,有多个客户,每个客户都想要自己的品牌色。用 0.3.x,你需要:
- 给每个客户打包一个不同的 APP
- 或者在运行时动态切换一堆 CSS 变量(麻烦且容易出错)
用 0.4.x,你只需要:
ts
// src/uview-pro.theme.ts
export default [
{
name: 'blue',
label: '蓝色主题(官方推荐)',
color: { primary: '#2979ff', /* ... */ }
},
{
name: 'purple',
label: '紫色主题(高端商务)',
color: { primary: '#7c3aed', /* ... */ }
},
{
name: 'green',
label: '绿色主题(医疗健康)',
color: { primary: '#10b981', /* ... */ }
}
];
然后在 APP 中提供一个主题切换器:
vue
<picker :range="themes" range-key="label" @change="switchTheme">
<view>选择主题</view>
</picker>
只需要加载一个配置文件,即可拥有多个主题!
简单。优雅。强大。

2. 暗黑模式:不只是一个开关
0.3.x 中暗黑模式完全不存在。你需要自己:
- 重新定义所有颜色的暗黑版本
- 手动监听系统主题变化
- 手动切换样式
这不仅代码复杂,而且维护成本极高。
0.4.x 直接内置,开箱即用:
ts
import { useTheme } from 'uview-pro';
const { darkMode, setDarkMode, toggleDarkMode, isInDarkMode } = useTheme();
// 跟随系统自动切换
setDarkMode('auto');
// 手动快速切换
toggleDarkMode();
// 检查当前是否暗黑
if (isInDarkMode()) {
console.log('夜间模式已启用');
}
而且,系统自动为你的亮色色板生成合理的暗色。不用自己去想"这个蓝色的暗黑版本应该是什么样"的问题。

二. 智能黑科技:颜色自动生成
问题:暗黑色值怎么来?
0.4.x 最牛逼的地方在这里:你只需提供亮色色板,暗色会自动生成。
用户配置了亮色 primary: '#2979ff',系统会自动计算出暗色 primary: '#639cff'。算法是什么?
简单地说,系统采用色值混合方案:
- 取用户提供的亮色
- 与预定义的暗色基准混合(加权平均,比例 0.6:0.4)
- 生成视觉层级合理、对比度充足的暗色
这意味着:
- ✅ 任何亮色都能生成合理的暗色
- ✅ 生成的暗色永远符合可读性标准
- ✅ 用户还能手动微调(如果想要)
ts
{
color: {
primary: '#2979ff',
bgColor: '#f3f4f6',
mainColor: '#303133'
},
darkColor: {
// 留空,系统自动生成:
// primary: '#639cff'
// bgColor: '#1a1a1a'
// mainColor: '#f5f5f5'
// 或者手动覆盖某个:
primary: '#6ba1ff' // 自定义暗色
// 其他的还是自动生成
}
}
这就是"智能"的含义。

三. 终极杀器:超强主题采购器
最酷的是,0.4.x 提供了一个可视化的主题配置工具。
你只需要:
-
打开工具页面
- 不需要写代码
- 不需要打开编辑器
- 打开浏览器就能用
-
选择颜色
- 直观的颜色拾取器
- 实时预览效果(按钮、卡片、背景全部实时展示)
- 看不爽?一键随机生成
-
启用暗黑
- 打开"暗黑模式"开关
- 系统自动生成所有暗色值
- 不满意?逐个调整,或者重新生成
-
导出使用
- 一键下载
uview-pro.theme.ts - 复制到项目
- 搞定!
- 一键下载


工具的超强能力
- 批量配置:配置完一套主题后,点"添加到队列",继续配置下一套。最后一次性导出所有主题。
- 实时预览:修改颜色的同时,看到按钮、卡片、背景的实时变化。不用猜,直观感受。
- 智能生成:一键生成随机的主题配色方案。配合 AI,说不定能撞出灵感。
- 折叠面板:颜色太多?按分类折叠。快速编辑,节省屏幕空间。

四. 技术细节:为什么这样设计?
1. 为什么采用 TS 数组而不是 SCSS?
0.3.x 使用 SCSS 变量导出。0.4.x 改成了 TS 数组:
ts
export default [
{
name: 'blue',
label: '蓝色',
description: '清爽蓝色主题',
color: { /* ... */ },
darkColor: { /* ... */ }
}
];
为什么?
- 动态性:TS 数组可以在运行时动态加载、修改、切换
- 可序列化:轻松 JSON.stringify,支持网络传输
- 类型安全:TypeScript 类型提示,避免拼写错误
- 可扩展:可以添加自定义字段(如 description、tags 等)
当然,SCSS 格式仍然支持。
2. 为什么要自动生成暗色?
手动定义每个颜色的暗色版本非常繁琐,而且容易出现视觉不一致。当然,一个标准的应用,它应该具备一个完美的配色。然而,实际情况有时比较随意。
自动生成的好处:
- 省时:从 60 个颜色 → 30 个(亮色)
- 一致:算法保证所有暗色在一个风格基调上
- 可靠:系统自动检查对比度、可读性
- 灵活:用户仍可手动覆盖任何一个
六. 实战升级:从 0.3.x 到 0.4.x
不用担心兼容性。升级很简单:
第一步:生成主题
访问工具,配置你的主题,导出 uview-pro.theme.ts。
第二步:注册主题
在 main.ts 中注册
ts
// main.ts
import theme from '@/uview-pro.theme';
import uViewPro from '@/uni_modules/uview-pro';
app.use(uViewPro, { theme });
在 uni.scss 中引入全局 scss变量
scss
@import 'uview-pro/theme.scss';
第三步:使用(完全向后兼容)
在 scss 中使用:
scss
// SCSS 中,和以前一样
.title {
color: $u-type-primary;
}
在 vue/ts 中使用:
js
import { ref, onMounted } from 'vue';
import {$u} from 'uview-pro'
const color = ref('');
onMounted(() => {
color.value = uni.$u.color['primary'];
// 或
color.value = $u.color['primary'];
});
此外,新增了 useTheme API
ts
const {
currentTheme, // Ref<Theme | null>
themes, // Ref<Theme[]>
darkMode, // Ref<'light' | 'dark' | 'auto'>
cssVars, // Ref<Record<string, string>>
setTheme,
getCurrentTheme,
getAvailableThemes,
initTheme,
getDarkMode,
setDarkMode,
isInDarkMode,
toggleDarkMode
} = useTheme();
- currentTheme / themes :直接在模板中使用,例如
currentTheme?.name、themes.map(...)。 - cssVars :包含诸如
--u-type-primary,--u-bg-color等变量,可配合v-bind绑定到行内样式。 - setTheme(name) :切换到指定主题,内部会持久化到
Storage,下次启动自动恢复。 - initTheme(list, defaultName?):大多数场景无需手动调用;只有当你在运行时动态获取主题列表时,需要显式调用一次。
- getDarkMode / setDarkMode :读写当前暗黑策略;
setDarkMode('auto')会立即跟随系统主题。 - toggleDarkMode() :在
light与dark间快速切换,常用于快捷开关。 - isInDarkMode() :返回布尔值,表示当前是否处于暗黑渲染状态(
auto时会考虑系统设置)。
七. 为什么用户会选择 0.4.x?
1. 降低维护成本
- 从手工定义 → 智能生成
- 从多份配置文件 → 统一主题文件
- 从复杂的色值管理 → 可视化工具
2. 加速迭代周期
- 设计稿出来了?打开工具,3 分钟出配置
- 客户要改色?无需代码发布,动态加载即可
- A/B 测试?支持多主题,轻松切换
3. 提升用户体验
- ✅ 暗黑模式完美适配
- ✅ 品牌色完全可定制
- ✅ 跟随系统自动切换
- ✅ 主题切换流畅无闪烁
4. 解放开发生产力
- 不用再手动维护颜色值
- 不用再写冗长的暗黑 CSS
- 不用再调试对比度和可读性
- 可以专注于业务逻辑
来自用户的声音
"之前为一个客户定制主题需要改改代码、测试、再改,要花一两天。现在用工具,5 分钟搞定。" ------ 某 B 端 SaaS 团队负责人
"暗黑模式自动生成,太爽了。之前手动定义,结果有的颜色对比度不够,被设计师挑出来好几次。现在系统搞定,心里踏实。" ------ 某软件公司前端主管
展望:0.4.1 之后的方向
0.4.1 是一个里程碑,但我们不会止步。后续的主题规划包括也不限于:
- 🎨 主题市场:官方预设主题库,一键导入
- 🤖 AI 配色助手:输入品牌描述,AI 自动生成配色方案
- 📊 主题分析:可视化展示色值对比度、可访问性评分
- 🔄 跨项目共享:主题配置可跨项目、跨团队使用
- 🌈 渐变色支持:支持渐变色的主题定义
结语
uView Pro 0.4.1 的多主题与暗黑模式系统,不仅仅是功能迭代,更是一种开发哲学的升级:
从 "我来适应组件" → "组件适应我"
从手动堆砌代码到可视化智能工具,从单一主题到多主题生态,从被迫学习暗黑适配到开箱即用。
如果你还在用 0.3.x,该升级了。
如果你从未用过 uView Pro,0.4.1 是最好的入场时机。
立即访问 uView Pro 官网 或 GitHub 仓库,体验这个超强的主题采购器。
快速链接
- 💪 官网 :uviewpro.cn/
- 🎨 主题配置工具 :uviewpro.cn/zh/guide/th...
- 📖 完整文档 :uviewpro.cn/zh/guide/cu...
- ⬆️ 升级指南 :uviewpro.cn/zh/componen...
- 💬 交流反馈 :uviewpro.cn/zh/resource...
- ⭐ 支持我们 :GitHub Star / Gitee Star 都感谢!
- GitHub:github.com/anyup/uview...
- Gitee:gitee.com/anyup/uview...
uView Pro 0.4.x,让你的应用主题焕然一新。