我写了一个 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...

相关推荐
Kapaseker9 小时前
Android 开放这扇门,正在被 Google 从里面反锁
android·kotlin
唐青枫10 小时前
别再把 Util 类堆成杂物间:Kotlin Extension 扩展函数与扩展属性实战详解
kotlin
plainGeekDev1 天前
依赖管理 → Version Catalog
android·java·kotlin
黄林晴1 天前
KMP 正式支持 SwiftPM:CocoaPods 迁移配置指南
android·ios·kotlin
花燃柳卧2 天前
跨平台路由组件工程源码补充上传
android·flutter·kotlin
TechNomad2 天前
Kotlin类对象与接口详解
android·kotlin
Ws_2 天前
Kotlin Multiplatform day2
kotlin
杉氧2 天前
Framework 补完计划 (2):BufferQueue 与 SurfaceFlinger —— 像素的跨进程“接力赛”
android·架构·android jetpack
我命由我123453 天前
Android 开发问题:ClickableSpan 的点击事件没有生效
java·java-ee·android studio·android jetpack·android-studio·android runtime
TechNomad3 天前
Kotlin_Lambda编程详解
android·kotlin