用途
该技能用于指导 Android 应用中使用 Jetpack Compose 构建界面时的实践方式,目标是创建高性能、可复用、可测试的 Composable。适用于编写或修改 Compose UI 代码的场景。
主要能力与实践要点
1. 状态提升(单向数据流)
尽可能让 Composable 保持无状态,把状态移动到调用方。推荐的函数签名模式为:
@Composable
fun MyComponent(
value: String, // State flows down
onValueChange: (String) -> Unit, // Events flow up
modifier: Modifier = Modifier // Standard modifier parameter
)
这样做的收益是让 UI 与简单的状态存储解耦,更易于预览和测试。在 ViewModel 集成方面,屏幕级 Composable 从 ViewModel 获取状态(viewModel.uiState.collectAsStateWithLifecycle())并向下传递。
2. Modifier
- 始终提供
modifier: Modifier = Modifier作为第一个可选参数。 - 将该 modifier 应用于 Composable 的根布局元素。
- 顺序很重要:
padding().clickable()与clickable().padding()不同。通常如果希望内边距区域可点击,应在点击监听之后应用影响布局的 modifier(如 padding)。
3. 性能优化
remember:使用remember { ... }跨重组缓存开销较大的计算。derivedStateOf:当状态频繁变化(如滚动位置)而 UI 只需对阈值或汇总结果作出反应时(例如显示“Jump to Top”按钮),使用它来避免不必要的重组:
val showButton by remember {
derivedStateOf { listState.firstVisibleItemIndex > 0 }
}
- Lambda 稳定性:优先使用方法引用(如
viewModel::onEvent)或经过 remember 的 lambda,以避免不稳定类型触发子级重组。
4. 主题与资源
- 使用
MaterialTheme.colorScheme和MaterialTheme.typography,而不是硬编码颜色或文本样式。 - 如果简单 UI 组件在多个功能间共享,按文件组织它们(如
DesignSystem.kt或Components.kt)。
5. 预览
- 为每个公开 Composable 创建私有的预览函数。
- 使用
@Preview(showBackground = true),如适用可包含浅色/深色模式预览。 - 向无状态 Composable 传入静态的占位数据用于预览。
限制
资料未提供该技能的安装命令、使用方法、适用平台版本、收费情况或效果说明。