Eksponere tilstand fra ViewModel
Styr Compose-brukergrensesnittet fra en ViewModel.
Eksponere tilstand fra ViewModel er en gratis leksjon i Android Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Android Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Android Academy inneholder totalt 4 leksjoner.
Eksponere tilstand for UI-et
En ViewModel inneholder tilstand, men UI-et trenger en måte å observere denne tilstanden på og gjengi seg selv på nytt når den endres.
I moderne Android finnes det to vanlige verktøy for dette: StateFlow og Compose State.
Mønsteret med mutable og immutable
En god praksis er å ha en privat mutable backing-egenskap og eksponere en offentlig skrivebeskyttet versjon.
Dette hindrer UI-et i å endre tilstanden direkte ved et uhell.
Eksponere med StateFlow
Bruk MutableStateFlow internt, og eksponer det som en skrivebeskyttet StateFlow.
class CounterViewModel : ViewModel() {
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()
fun increment() {
_count.value++
}
}Samle inn StateFlow i Compose
Composable-en konverterer flow-en til Compose-tilstand med collectAsState() (eller den livssyklusbevisste varianten som gjennomgås senere).
@Composable
fun CounterScreen(vm: CounterViewModel) {
val count by vm.count.collectAsState()
Text("Count: " + count)
}Hvorfor StateFlow trenger en startverdi
En StateFlow har alltid en gjeldende verdi. Derfor må De gi den en startverdi når De oppretter den.
Alle nye collectors mottar den nyeste verdien umiddelbart, aldri en tom strøm.
Alternativ: Compose mutableStateOf
For enkel skjermlokal tilstand i ViewModel-en kan De også bruke Compose-mutableStateOf, som Compose observerer automatisk.
class CounterViewModel : ViewModel() {
var count by mutableStateOf(0)
private set
fun increment() { count++ }
}StateFlow kontra Compose State
- StateFlow er en del av Kotlin Coroutines og fungerer overalt, ikke bare i Compose. Det egner seg godt for delte strømmer som tar hensyn til livssyklusen.
- mutableStateOf er Compose-spesifikk og svært kortfattet.
StateFlow foretrekkes vanligvis for ViewModel-er i større apper.
Modellere skjermtilstand som ett objekt
I stedet for mange separate flow-er kan De samle relaterte felt i én UI-tilstandsdataklasse. Dette gir atomiske og forutsigbare oppdateringer.
data class ProfileUiState(
val name: String = "",
val isLoading: Boolean = false,
val error: String? = null
)Eksponere UI-tilstandsobjektet
Eksponer én StateFlow med denne tilstandsklassen. UI-et leser alt fra én felles sannhetskilde.
private val _uiState = MutableStateFlow(ProfileUiState())
val uiState: StateFlow<ProfileUiState> =
_uiState.asStateFlow()Oppdatere uforanderlig tilstand
Oppdater tilstanden ved å opprette en kopi med endrede felt, aldri ved å endre det gamle objektet direkte.
fun load() {
_uiState.update { it.copy(isLoading = true) }
// ... fetch, then:
_uiState.update {
it.copy(isLoading = false, name = "Ada")
}
}Hendelser flyter opp, tilstand flyter ned
Dette er kjernen i enveis dataflyt:
- Tilstanden flyter ned fra ViewModel til brukergrensesnittet.
- Hendelser flyter opp fra brukergrensesnittet til ViewModel via funksjonskall.
Hurtigsjekk
Test forståelsen Deres av hvordan tilstand eksponeres.
Oppsummering
De har lært:
- Å beholde en privat
MutableStateFlowog eksponere en skrivebeskyttetStateFlow. - Å samle relaterte felt i en data class for brukergrensesnittets tilstand.
- Å oppdatere med
copy()viaupdate {}. - At tilstanden flyter ned, mens hendelser flyter opp.
Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 36
- Leksjoner
- 152
Ofte stilte spørsmål
Er leksjonen «Eksponere tilstand fra ViewModel» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Android Academy, inkludert «Eksponere tilstand fra ViewModel», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Android Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Eksponere tilstand fra ViewModel»?
Styr Compose-brukergrensesnittet fra en ViewModel. Du øver på Android Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Android Academy?
Ingen tidligere erfaring er nødvendig. Android Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Eksponere tilstand fra ViewModel»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Android Academy-leksjonen?
Ja. Alle Android Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Hvorfor bruke en ViewModel?
- Eksponere tilstand fra ViewModel
- Android-livssyklusen
- collectAsStateWithLifecycle