Android Academy · Les

State beschikbaar maken vanuit een ViewModel

Laat een ViewModel de Compose-UI aansturen.

Les 2 van 413 stappen

State beschikbaar maken vanuit een ViewModel is een gratis Android Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Android Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Android Academy bevat in totaal 4 lessen.

Status aan de UI beschikbaar maken

Een ViewModel bevat status, maar de UI heeft een manier nodig om die status te observeren en opnieuw te renderen wanneer deze verandert.

In moderne Android-apps zijn hiervoor twee veelgebruikte hulpmiddelen: StateFlow en Compose State.

Het patroon voor veranderlijke en onveranderlijke status

Een goede praktijk is om een private veranderlijke backing-eigenschap te behouden en een publieke alleen-lezen-versie beschikbaar te maken.

Zo voorkom je dat de UI de status per ongeluk rechtstreeks wijzigt.

Beschikbaar maken met StateFlow

Gebruik intern een MutableStateFlow en maak dit beschikbaar als een alleen-lezen StateFlow.

class CounterViewModel : ViewModel() {
    private val _count = MutableStateFlow(0)
    val count: StateFlow<Int> = _count.asStateFlow()

    fun increment() {
        _count.value++
    }
}

StateFlow verzamelen in Compose

De Composable zet de flow om in Compose-status met collectAsState() (of de levenscyclusbewuste variant die later wordt behandeld).

@Composable
fun CounterScreen(vm: CounterViewModel) {
    val count by vm.count.collectAsState()
    Text("Count: " + count)
}

Waarom StateFlow een beginwaarde nodig heeft

Een StateFlow heeft altijd een huidige waarde. Daarom moet je een beginwaarde opgeven wanneer je deze maakt.

Elke nieuwe verzamelaar ontvangt onmiddellijk de nieuwste waarde; er is nooit sprake van een lege stroom.

Alternatief: Compose mutableStateOf

Voor eenvoudige schermlokale status in het ViewModel kun je ook Compose mutableStateOf gebruiken. Compose observeert deze automatisch.

class CounterViewModel : ViewModel() {
    var count by mutableStateOf(0)
        private set

    fun increment() { count++ }
}

StateFlow versus Compose State

  • StateFlow maakt deel uit van Kotlin-coroutines en werkt overal, niet alleen in Compose. Het is uitstekend geschikt voor gedeelde stromen die rekening houden met de levenscyclus.
  • mutableStateOf is specifiek voor Compose en zeer beknopt.

Voor ViewModels in grotere apps heeft StateFlow over het algemeen de voorkeur.

Schermstatus modelleren als één object

In plaats van veel afzonderlijke flows groepeer je gerelateerde velden in één gegevensklasse voor de UI-status. Zo blijven updates atomair en voorspelbaar.

data class ProfileUiState(
    val name: String = "",
    val isLoading: Boolean = false,
    val error: String? = null
)

Het UI-statusobject beschikbaar maken

Maak één StateFlow van die statusklasse beschikbaar. De UI leest alles uit één centrale bron van waarheid.

private val _uiState = MutableStateFlow(ProfileUiState())
val uiState: StateFlow<ProfileUiState> =
    _uiState.asStateFlow()

Onveranderlijke status bijwerken

Werk de status bij door een kopie met gewijzigde velden te maken, en wijzig nooit het oude object rechtstreeks.

fun load() {
    _uiState.update { it.copy(isLoading = true) }
    // ... fetch, then:
    _uiState.update {
        it.copy(isLoading = false, name = "Ada")
    }
}

Gebeurtenissen stromen omhoog, status stroomt omlaag

Dit is de kern van eenrichtingsgegevensstroom:

  • De status stroomt omlaag van ViewModel naar de gebruikersinterface.
  • Gebeurtenissen stromen omhoog van de gebruikersinterface naar ViewModel via functieaanroepen.

Korte controle

Test je begrip van het beschikbaar maken van status.

Samenvatting

Je hebt geleerd:

  • Houd een private MutableStateFlow bij en maak een alleen-lezen-StateFlow beschikbaar.
  • Groepeer verwante velden in een UI-statusgegevensklasse.
  • Werk bij met copy() via update {}.
  • De status stroomt omlaag en gebeurtenissen stromen omhoog.
Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
36
Lessen
152

Veelgestelde vragen

Is de les “State beschikbaar maken vanuit een ViewModel” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Android Academy, waaronder “State beschikbaar maken vanuit een ViewModel”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Android Academy bevat in totaal 4 lessen.

Wat leer ik in “State beschikbaar maken vanuit een ViewModel”?

Laat een ViewModel de Compose-UI aansturen. Je oefent met Android Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Android Academy te beginnen?

Ervaring vooraf is niet nodig. Android Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “State beschikbaar maken vanuit een ViewModel”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Android Academy?

Ja. Elke les over Android Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Waarom een ViewModel gebruiken?
  2. State beschikbaar maken vanuit een ViewModel
  3. De Android-lifecycle
  4. collectAsStateWithLifecycle
← Terug naar Android Academy