用途:在 Bitwarden Android 代码库中实现代码时使用的战术性指引,覆盖该仓库特有的关键模式、易错点与反模式。完整架构决策与代码风格规则需查阅 docs/ARCHITECTURE.md 和 docs/STYLE_AND_BEST_PRACTICES.md。
主要能力: 一、ViewModel 采用 State-Action-Event 模式,基于 BaseViewModel<State, Event, Action>;需 @HiltViewModel,State 为 @Parcelize data class : Parcelable,handleAction 必须同步,协程中通过 sendAction() 投递内部 action,用 SavedStateHandle[KEY_STATE] 保存恢复状态,私有处理函数以 handle* 命名。注意:不要在协程中直接更新 mutableStateFlow;敏感数据用 @IgnoredOnParcel。 二、导航使用 kotlinx.serialization 类型安全路由,包含 @Serializable route data class、...Args 辅助类、NavGraphBuilder 扩展与 NavController.navigateTo{Screen}() 扩展。 三、屏幕使用 Compose:hiltViewModel() 注入、collectAsStateWithLifecycle() 收集状态、EventsEffect 处理一次性事件、使用 :ui 模块 Bitwarden* 组件;状态提升区分 ViewModel 状态与仅 UI 状态。 四、数据层坚持接口与 Impl 分离,注入接口不注入实现;数据源返回 Result<T> 不抛异常,仓库返回领域 sealed 类;用 StateFlow 承载持续观察的数据。接口 KDoc 只描述契约,实现细节放 Impl。 五、UI 组件优先复用 :ui 模块已有 Bitwarden* 组件,新组件需以 Bitwarden 前缀、使用 BitwardenTheme、提供预览并支持无障碍;新字符串放入 :ui 模块 strings.xml。 六、安全:凭证密钥用 @EncryptedPreferences,UI 状态用 @UnencryptedPreferences,敏感数据不记录日志,输入校验返回布尔值不抛异常。 七、测试:继承 BaseViewModelTest,使用 runTest、Turbine 的 .test { awaitItem() } 与 MockK(coEvery 用于挂起函数)。 八、时间处理必须注入 Clock,禁止直接调用 Instant.now() 或 DateTime.now(),测试用 Clock.fixed。
限制:该技能为 Bitwarden 仓库内部约定指引,不适用于其他项目;具体构建、测试与代码库检索命令需使用 build-test-verify 技能;未提供收费、价格、平台或效果信息。