界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
开发与工程 · SKILL.md

android-state

android-state

【开发与工程】Configure ViewModel state emission with StateFlow, SharedFlow, and sealed UiState classes in Android. Use for state modeling and sharing policies; defer generic lifecycle collection, navigation-event plumbing, Hilt injection, test code, and configuration-change recipes to their specific skills.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: android-state description: Configure ViewModel state emission with StateFlow, SharedFlow, and sealed UiState classes in Android. Use for state modeling and sharing policies; defer generic lifecycle collection, navigation-event plumbing, Hilt injection, test code, and configuration-change recipes to their specific skills. metadata: triggers: files: - '/*ViewModel.kt' - '/*UiState.kt' keywords: - viewmodel - stateflow - livedata - uistate - MutableStateFlow - collectAsState - viewModelScope - UiState

Android State Management

Priority: P0 (CRITICAL)

1. Structure ViewModel

  • Expose ONE StateFlow<UiState> via .asStateFlow().
  • Use viewModelScope for all coroutines.
  • Trigger initial load in init block.

See templates for ViewModel and UiState examples.

2. Define UI State (LCE Pattern)

  • Use sealed interface with Loading, Content, Error variants.
  • Mark data classes @Immutable.

See templates for sealed UiState pattern.

3. Collect State Lifecycle-Safely

  • Use collectAsStateWithLifecycle() in Compose.
  • Use SharingStarted.WhileSubscribed(5000) for shared resources.

Anti-Patterns

  • No LiveData for New Code: Use StateFlow — lifecycle-safe and Compose-compatible.
  • No Public MutableStateFlow: Expose only .asStateFlow() to consumers.
  • No Context in ViewModel: Leaks Activity. Use Application context if truly needed.

Verification

  • Each ViewModel exposes exactly one StateFlow<UiState>.
  • UiState is a sealed interface with Loading, Content, Error variants.
  • UI collects with collectAsStateWithLifecycle().
  • ./gradlew test passes for ViewModel tests.

References

我的收藏