Skillshub android-state
Standards for ViewModel, StateFlow, and UI State Patterns. Use whenever someone works with ViewModel files, asks about UiState sealed classes, MutableStateFlow vs LiveData, collectAsStateWithLifecycle, viewModelScope, or exposing state from Android ViewModels — even indirectly. (triggers: **/*ViewModel.kt, **/*UiState.kt, viewmodel, stateflow, livedata, uistate, MutableStateFlow, collectAsState, viewModelScope, UiState)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/android-state" ~/.claude/skills/comeonoliver-skillshub-android-state && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/android-state/SKILL.mdsource content
Android State Management
Priority: P0
Implementation Guidelines
ViewModel Pattern
- Exposure: Expose ONE
viaStateFlow<UiState>
..asStateFlow() - Scope: Use
for all coroutines.viewModelScope - Initialization: Trigger initial load in
orinit
(once).LaunchedEffect
UI State (LCE)
- Type: sealed interface
(Loading, Content, Error).UiState - Immutability: Data classes inside should be
.@Immutable
Flow Lifecycle
- Collection: Use
in Compose.collectAsStateWithLifecycle() - Hot Flows: Use
for shared resources.SharingStarted.WhileSubscribed(5000)
Anti-Patterns
- No LiveData for New Code: Use StateFlow — lifecycle-safe and Compose-compatible.
- No Public MutableStateFlow: Expose only
to consumers..asStateFlow() - No Context in ViewModel: Leaks Activity. Use Application context if truly needed.