我写了一个 Compose Multiplatform 组件库,你可能会用到

过去大半年做 Compose Multiplatform 项目的时候,我一直在重复造轮子------表单、弹窗、表格、主题色切来切去。每次开新项目都要拷来拷去,烦了,就干脆抽了一个库出来。

这就是 Palette ,一个给 Compose Multiplatform 用的组件库,一套代码跑 Android、Desktop、iOS 三个平台。

GitHub: github.com/junerver/Pa...


先看一眼长什么样

以下都是实机截图:


有哪些东西

截至目前,大概 60 多个组件,分了五大类:

表单:按钮、复选框、单选框、开关、滑块、评分、输入框、搜索栏、数字输入、OTP 输入、选择器、级联选择、树选择、穿梭框、自动补全、@提及、颜色选择器、分段控制、日历、日期选择器、时间选择器、文件上传......你能想到的表单控件基本都cover了。

反馈:Loading、进度条、徽章、对话框、Toast / Message / Notification(三种消息提示,场景不同)、骨架屏、标签、弹出层、动作面板、右键菜单、警告提示、气泡确认、结果页、无限滚动、水印、悬浮按钮。

导航 :工具栏、固钉、回到顶部、页面头部、抽屉、菜单、标签页、面包屑、步骤条、命令面板(就是 VS Code 那种 Cmd+K)。

布局:行布局、边框容器、卡片、头像、折叠面板、栅格、间距。

数据展示:表格、数据网格、列表、描述列表、统计数值、时间线、树形控件、图片、轮播、分页、空状态、二维码/条形码、虚拟列表。

基本上做一个中后台或者管理端,拿来就能用。


主题系统才是重头戏

组件多不算本事,调样式方便才算。Palette 的主题系统是我花时间最多的地方。

一句代码换主题色

ini 复制代码
val colors = PaletteColors.light().derive(
    primary = Color(0xFF0057D9),
)

PaletteMaterialTheme(colors = colors) {
    App()
}

derive() 会自动从你的主色推导出整套语义色(hover、pressed、disabled 等等),不用你一个个去配。暗色模式用 PaletteColors.dark() 同理。

不想每个按钮都调一遍?改全局默认值

大部分组件库的主题只能管颜色。Palette 做到了一级 Token 覆盖组件的所有主要样式面------颜色、圆角、字号、间距、透明度、动效、阴影,哪怕是一个按钮的禁用态透明度,都能在主题层一键改掉:

ini 复制代码
val components = PaletteComponentThemes.default(colors = colors).let { base ->
    base.copy(
        button = base.button.copy(disabledAlpha = 0.56f),
        card = base.card.copy(cornerRadius = 0.dp, elevation = 0.dp),
    )
}

PaletteMaterialTheme(colors = colors, componentThemes = components) {
    App()
}

全局改一次,所有实例生效,不用满项目改样式。


和 compose-hooks 搭配更香

Palette 内部已经接入了我的另一个项目 compose-hooks,把 React Hooks 那套状态管理搬到了 Compose:

scss 复制代码
val (count, setCount) = useState(0)
val (visible, toggle) = useBoolean(false)

写起来比 mutableStateOf 清爽不少。如果你用 Compose Multiplatform,这两个库搭配基本覆盖了 UI 层所有需求。


怎么用

Gradle 加一行:

scss 复制代码
dependencies {
    implementation("xyz.junerver.compose:palette:0.1.0")
}

三行代码跑起来:

ini 复制代码
PaletteMaterialTheme(darkTheme = false) {
    Screen(title = "Hello Palette") {
        // 你的内容
    }
}

如果觉得默认样式不符合品牌色,参考上面的主题配置,几行代码搞定全局换肤。


支持范围

平台 版本
Android minSdk 24
Desktop JVM
iOS arm64 / simulatorArm64

项目还比较早期(0.1.0),在持续迭代中,Star 收藏不迷路。

GitHub: github.com/junerver/Pa...

相关推荐
传奇开心果编程7 小时前
【Jetpack Compose基础语法学与练】第8课 rememberSaveable,页面旋转/系统重建保留状态
android·学习·ui·kotlin·android jetpack
传奇开心果编程11 小时前
【Jetpack Compose基础语法学与练】第7课 if条件渲染 + 列表基础(LazyColumn)
学习·ui·kotlin·android jetpack
ai2work11 小时前
ch12 系统能力接入:TTS、剪贴板、分享、文件选择器
kotlin
传奇开心果编程12 小时前
【Jetpack Compose基础语法学与练】第9课 SideEffect副作用 + LaunchedEffect,处理异步任务和生命周期
android·学习·ui·kotlin·android jetpack
惟恋惜1 天前
第 3 章 · 列表、滚动与 Lazy 深入:告别 RecyclerView 思维
ui·android jetpack
不要喷香水2 天前
00-总览与架构
kotlin·app·档案管理
hai_android2 天前
Android 组件化开发实践
android·java·kotlin
传奇开心果编程2 天前
【Jetpack Compose基础语法学与练】第6课 TextField文本输入,字符串状态与输入交互
学习·前端框架·kotlin·android jetpack
ai2work3 天前
ch06 Jetpack Compose 入门:状态驱动 UI
kotlin
JMchen4 天前
第 12 篇|项目整合与打包发布 —— 从 Demo 到可安装 APK 的完整收官指南
kotlin·android studio