为 KMP 项目提供 Compose 多平台界面架构、导航、主题与性能实践。
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "compose-multiplatform-patterns" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/skills/compose-multiplatform-patterns/SKILL.md 2. 保存为 ~/.claude/skills/compose-multiplatform-patterns/SKILL.md 3. 装好后重载技能,告诉我可以用了
请为一个 Compose Multiplatform 列表页设计状态管理方案,使用 ViewModel + 单一 State 对象,包含加载、错误、搜索和数据列表,并给出 Compose 层的状态收集示例。
输出一个适用于 KMP/Compose 的状态数据类、ViewModel 状态流和 Compose 收集方式示例。
请把一个包含搜索、删除、刷新操作的 Compose 页面回调,重构为 sealed interface 事件模型,并展示 ViewModel 如何统一处理 onEvent。
输出统一事件定义与 ViewModel 分发逻辑,减少页面中分散的回调参数。
请为 Compose Navigation 2.8+ 设计一个类型安全的导航示例,包含首页、详情页和设置页路由,适合 KMP 或 Android 项目参考。
输出基于可序列化路由对象的数据结构和导航组织示例。
开发者在 Android、iOS、Desktop 与 Web 共享 Compose UI 时,可用这些模式统一状态管理、组件拆分与页面组织方式。
当页面逻辑变复杂、回调增多时,这个技能可帮助团队采用单一状态对象与事件入口模式,提升可维护性与可测试性。
在 KMP 或 Android 项目中设计导航、主题和可复用 composables 时,可参考这些模式建立更一致的界面实现方式。
文档介绍如何在 Android、iOS、Desktop 与 Web 间使用 Compose Multiplatform 构建共享 UI,重点涵盖状态管理、导航、主题与性能实践。已展示单一状态对象配合 ViewModel 和 StateFlow、Compose 中的状态收集方式,以及用 sealed interface 统一页面事件入口,并提到类型安全导航方案。
Patterns for building shared UI across Android, iOS, Desktop, and Web using Compose Multiplatform and Jetpack Compose. Covers state management, navigation, theming, and performance.
Use a single data class for screen state. Expose it as StateFlow and collect in Compose:
data class ItemListState(
val items: List<Item> = emptyList(),
val isLoading: Boolean = false,
val error: String? = null,
val searchQuery: String = ""
)
class ItemListViewModel(
private val getItems: GetItemsUseCase
) : ViewModel() {
private val _state = MutableStateFlow(ItemListState())
val state: StateFlow<ItemListState> = _state.asStateFlow()
fun onSearch(query: String) {
_state.update { it.copy(searchQuery = query) }
loadItems(query)
}
private fun loadItems(query: String) {
viewModelScope.launch {
_state.update { it.copy(isLoading = true) }
getItems(query).fold(
onSuccess = { items -> _state.update { it.copy(items = items, isLoading = false) } },
onFailure = { e -> _state.update { it.copy(error = e.message, isLoading = false) } }
)
}
}
}
@Composable
fun ItemListScreen(viewModel: ItemListViewModel = koinViewModel()) {
val state by viewModel.state.collectAsStateWithLifecycle()
ItemListContent(
state = state,
onSearch = viewModel::onSearch
)
}
@Composable
private fun ItemListContent(
state: ItemListState,
onSearch: (String) -> Unit
) {
// Stateless composable — easy to preview and test
}
For complex screens, use a sealed interface for events instead of multiple callback lambdas:
sealed interface ItemListEvent {
data class Search(val query: String) : ItemListEvent
data class Delete(val itemId: String) : ItemListEvent
data object Refresh : ItemListEvent
}
// In ViewModel
fun onEvent(event: ItemListEvent) {
when (event) {
is ItemListEvent.Search -> onSearch(event.query)
is ItemListEvent.Delete -> deleteItem(event.itemId)
is ItemListEvent.Refresh -> loadItems(_state.value.searchQuery)
}
}
// In Composable — single lambda instead of many
ItemListContent(
state = state,
onEvent = viewModel::onEvent
)
Define routes as @Serializable objects:
@Serializable data object HomeRoute
@Serializable data class DetailRoute(val id: String)
@Serializable data object SettingsRoute
@Composable
fun AppNavHost(navController: NavHostController = rememberNavController()) {
NavHost(navController, startDestination = HomeRoute) {
composable<HomeRoute> {
HomeScreen(onNavigateToDetail = { id -> navController.navigate(DetailRoute(id)) })
}
composable<DetailRoute> { backStackEntry ->
val route = backStackEntry.toRoute<DetailRoute>()
DetailScreen(id = route.id)
}
composable<SettingsRoute> { SettingsScreen() }
}
}
Use dialog() and overlay patterns instead of imperative show/hide:
NavHost(navController, startDestination = HomeRoute) {
composable<HomeRoute> { /* ... */ }
dialog<ConfirmDeleteRoute> { backStackEntry ->
val route = backStackEntry.toRoute<ConfirmDeleteRoute>()
ConfirmDeleteDialog(
itemId = route.itemId,
onConfirm = { navController.popBackStack() },
…
它提供 Compose Multiplatform 和 Jetpack Compose 的常见实现模式,重点覆盖共享 UI、状态管理、导航、主题和性能优化。
文档明确提到适用于 KMP 项目,以及使用 Jetpack Compose 或 Compose Multiplatform 构建界面的场景。
已给出的内容包括 ViewModel + 单一 State 对象、在 Compose 中收集 StateFlow、事件汇聚模式,以及 Compose Navigation 2.8+ 的类型安全导航。更多细节见源码仓库。
帮助零售团队进行需求预测、库存优化与多门店补货规划决策。
在每次编辑代码时自动格式化、检查并智能修复质量问题
提供 NestJS 架构模式与最佳实践,帮助构建可维护的生产级 TypeScript 后端。
提供 TypeScript、Python 与 Go 的健壮错误处理模式与用户提示策略
用于审计 Claude 技能与命令质量,支持快速扫描和全量盘点评估。
帮助开发者与设计师实现 iOS 液态玻璃动态界面与交互效果。
帮助开发者掌握 Kotlin 协程与 Flow 在 Android 和 KMP 中的实战模式。
提供地道 Kotlin 模式与最佳实践,帮助构建健壮高效且易维护的应用。
帮助开发者快速掌握 Kotlin Ktor 服务端常用架构与测试模式。
提供 Docker 与 Compose 实战模式,帮助搭建安全高效的本地多容器开发环境。
帮助开发者构建 React 微前端架构,并实现共享依赖、动态表单与状态管理。
帮助你梳理 React 与 Next.js 前端模式、状态管理及性能优化最佳实践