移动/游戏
在编写或审查 Jetpack Compose…
用于 Jetpack Compose 中状态归属、状态提升、屏幕状态持有者以及 LaunchedEffect/DisposableEffect/SideEffect、Flow 收集、导航、snackbar、分析、焦点请求等副作用的编写与审查。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在编写或审查 Jetpack Compo通用
解决思路
- 确定请求的范围和可见的行为需求;只有当代码或任务证据显示存在生命周期、可测试性、业务或协调需求时,才把归属变更视为一个问题。
- 清点受影响的屏幕或组件中的可变 UI 状态、应用状态、事件流、应用依赖和命令式工作。
- 把每个状态值放在其最低必要所有者处:本地 UI 状态、提升状态、普通 UI 状态持有者或屏幕状态持有者。
- 对于屏幕边界,把持久数据和意图放在 wiring 所有者中,把 Compose 运行时对象放在组合或普通 UI 状态持有者中,把渲染放在可预览的内容 composable 中,该 composable 分别接收不可变状态和回调;阅读 [State hoisting](references/state-hoisting.md) 了解实现形态,仅命名状态和意图并不构成该边界。
- 选择生命周期与工作匹配的 effect API,并用应重启或销毁它的语义输入作为 key。
- 对下面每个重要关注点加载对应的聚焦参考;不要仅仅因为主题相邻就使用某个参考。
- 把帧率读取、跨阶段回写和 `@ReadOnlyComposable` 契约路由到 [Compose performance](../compose-performance/SKILL.md)。
- 在回应屏幕归属审查之前,当可见代码需要时,验证第 4 步中的所有三个屏幕接缝。
- 当每个状态值都有唯一所有者、每个 effect 都有合理的生命周期和 key、且 UI 可以在没有应用依赖的情况下预览和测试时结束;对于仅审查的工作,当没有证据支持的问题残留时报告无需更改,不要发明产品需求。
- 按信号查阅主题路由:裸局部 `var`、`remember { mutableStateOf(...) }`、状态列表/映射或重置状态 → [Local state](references/local-state.md);兄弟组件共享状态、UI 状态持有者、ViewModel/组件 wiring 或可预览屏幕边界 → [State hoisting](references/state-hoisting.md);`LaunchedEffect`、`DisposableEffect`、`SideEffect`、`snapshotFlow`、`rememberCoroutineScope`、`rememberUpdatedState`、`produceState`、命令式 `requestFocus`、回调、事件 Flow 收集、snackbar、导航或分析 → [Side effects](references/side-effects.md);焦点归属和键盘/TV/D-pad 行为 → [Compose focus navigation](../compose-focus-navigation/SKILL.md);针对所得 UI 契约的测试或预览 → [Compose UI testing patterns](../compose-ui-testing-patterns/SKILL.md)。
适用边界 · 注意事项
- 仅当代码或任务证据显示存在生命周期、可测试性、业务或协调需求时才变更归属,不要仅凭猜测。
- 不要仅仅因为某个参考的主题相邻就加载它。
- 对于仅审查的工作,当没有证据支持的问题残留时不要发明产品需求或强行报告更改。