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

相关推荐
Ehtan_Zheng1 天前
Kotlin const val vs val:字节码、性能与隐藏陷阱详解
android·kotlin
zhangphil1 天前
大日志文件截取,从指定日志文件中提取两个标记字符串之间的全部内容,Kotlin
kotlin
我命由我123451 天前
Jetpack Room - Room 查询返回列表无需判空、LIKE 关键字
android·java·开发语言·java-ee·android jetpack·android-studio·android runtime
朝星1 天前
Android开发[14]:网络优化之OkHttp
android·okhttp·kotlin
AI浩1 天前
模型剪枝与稀疏推理:结构化、非结构化、2:4 稀疏与大模型压缩(分层式精讲)
android·kotlin·剪枝
QING6182 天前
Kotlin 日常开发常用语法糖整理 —— 速记
android·kotlin·android jetpack
popcorn_min2 天前
共享单车需求预测:时间特征工程 + 随机森林,R² 达到 0.931
随机森林·r语言·kotlin
Attachment George2 天前
山东大学软件学院-项目实训-个人开发日志(十):材料问答链路开发——文档解析、OCR兜底与持续追问完善
python·ai·langchain·kotlin·rag
我命由我123452 天前
Android 开发问题:EditText 控件的 android:imeOptions=“actionDone“ 属性不生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime