UI State Management¶
UI state management separates durable render state from one-shot events.
Pattern¶
ViewModels follow BaseViewModel<UiState, Event>.
UiState: persistent state used to render the screenEvent: one-shot side effects such as navigation or snackbar
Example¶
data class LoginUiState(
val email: String = "",
val password: String = "",
val isLoading: Boolean = false,
)
Use lifecycle-aware collection:
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
Checklist¶
- [ ] UiState is immutable.
- [ ] One-shot effects are modeled as Event.
- [ ] UI uses
collectAsStateWithLifecycle().