Skip to content

UI 组件

app/src/main/java/com/joker/kit/core/ui 承载了项目级的业务 UI 基础库:所有可复用的 Compose 组件(空态、加载态、标题、文本样式等)都应在此处沉淀,再供 Feature 层引用。与 core/designsystem 的职责不同:designsystem 只对官方 Material 组件做尺寸/颜色的适配,而 core/ui 则可以根据业务特征封装完整组件。

目录结构

目录/文件说明
component/empty/*空数据、无网络、错误等占位组件,默认配合 BaseNetWorkView 使用。
component/loading/*页面加载、局部加载、加载更多进度等动画。
component/network/*不分页 (BaseNetWorkView) 与分页 (BaseNetWorkListView) 三态容器。
component/refresh/*RefreshLayoutRefreshHeaderRefreshState,用于实现下拉刷新/上拉加载。
component/text/Text.kt预设的文本样式封装,如 PrimaryLabelHintText
component/title/TitleWithLine.kt标题组件示例,内置分割线。
component/divider/Divider.kt统一的分割线封装,配合 designsystem 的尺寸/颜色。

如果需要新增自定义按钮、卡片、导航栏等,请在 component 下新建子目录,让所有业务页面共享。

现有组件速览

空/加载/错误状态

  • EmptyDataEmptyNetworkEmptyError:根据不同场景展示文案、插画和操作按钮。
  • PageLoadingLoadMoreLoading:统一的骨架/进度动画,避免每个页面重复实现。
  • 推荐与 BaseNetWorkView / BaseNetWorkListView 组合,以保持 Loading/Success/Error 行为一致。

网络容器

  • BaseNetWorkView:封装“未分页的三态 UI”。接收 BaseNetWorkUiState<T>content lambda,默认提供加载/错误页面,支持自定义动画。
  • BaseNetWorkListView:在三态基础上增加分页、上拉加载、空列表占位等能力,内部已经接好 LoadMoreStateRefreshLayout

刷新体系

  • RefreshLayout:将 rememberPullRefreshState、动画头、内容 Slot 等统一到一个容器中。
  • RefreshHeader/RefreshState:定义下拉刷新时的不同阶段(Idle、Pulling、Refreshing 等),可按需替换头部。
  • 示例可参考 context/template 中的分页模板以及 GoodsCommentScreen

文字与标题

  • Text.kt 中提供了常见的文字样式封装(如列表项副标题、提示文本等),避免在业务代码里直接堆 TextStyle
  • TitleWithLine:常用于设置页、详情页中分组标题,下方自动绘制分割线。

如何新增业务组件

  1. 确定分类:若是新的空态/加载态,放入 component/emptycomponent/loading;若是全新类型,可新建目录(如 component/banner)。
  2. 封装 API:参考现有组件的写法,导出 @Composable 函数,并对参数提供默认值。必要时在文件头用 KDoc 写明用途。
  3. 引用 designsystem:尺寸、颜色、间距尽量从 core/designsystem/theme 中读取,确保整体一致。
  4. 示例与文档:如果组件较复杂,请在 docs/help/core/ui.md 中追加简短说明或用法片段,方便其他人查阅。

通过在 core/ui 中集中管理可复用的业务组件,团队成员在实现新页面时可以直接挑选现有积木(骨架、空态、标题、刷新容器等),而无需在 designsystem 或 Feature 层重复造轮子。需要扩展时只需在此目录补齐,便能在全局范围复用。