0Pricing
Android Academy · Lekcja

Udostępnianie stanu z ViewModel

Steruj interfejsem Compose za pomocą ViewModel

Udostępnianie stanu z ViewModel to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.

Udostępnianie stanu interfejsowi

ViewModel przechowuje stan, ale interfejs potrzebuje sposobu na obserwowanie tego stanu i ponowne renderowanie po jego zmianie.

We współczesnym Androidzie służą do tego dwa często używane narzędzia: StateFlow i State w Compose.

Wzorzec Mutable i Immutable

Najlepszą praktyką jest przechowywanie prywatnej właściwości zmiennej i udostępnianie jej publicznej wersji tylko do odczytu.

Zapobiega to przypadkowej bezpośredniej modyfikacji stanu przez interfejs.

Udostępnianie za pomocą StateFlow

Wewnątrz używaj MutableStateFlow, a na zewnątrz udostępniaj go jako przeznaczony tylko do odczytu StateFlow.

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

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

Zbieranie StateFlow w Compose

Composable konwertuje przepływ na stan Compose za pomocą collectAsState() (lub wariantu uwzględniającego cykl życia, który omówimy później).

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

Dlaczego StateFlow potrzebuje wartości początkowej

StateFlow zawsze ma bieżącą wartość. Dlatego podczas jego tworzenia musisz podać wartość początkową.

Każdy nowy odbiorca natychmiast otrzymuje najnowszą wartość, a nie pusty strumień.

Alternatywa: Compose mutableStateOf

W przypadku prostego stanu lokalnego ekranu wewnątrz ViewModel możesz również użyć funkcji Compose mutableStateOf, którą Compose automatycznie obserwuje.

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

    fun increment() { count++ }
}

StateFlow a State w Compose

  • StateFlow jest częścią współprogramów Kotlin i działa wszędzie, nie tylko w Compose. Świetnie nadaje się do współdzielonych strumieni uwzględniających cykl życia.
  • mutableStateOf jest rozwiązaniem właściwym dla Compose i bardzo zwięzłym.

W większych aplikacjach zwykle preferuje się StateFlow w ViewModel.

Modelowanie stanu ekranu jako jednego obiektu

Zamiast wielu osobnych przepływów połącz powiązane pola w jedną klasę danych stanu interfejsu. Dzięki temu aktualizacje są atomowe i przewidywalne.

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

Udostępnianie obiektu stanu interfejsu

Udostępnij jeden obiekt StateFlow tej klasy stanu. Interfejs odczytuje wszystkie dane z jednego źródła prawdy.

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

Aktualizowanie niemodyfikowalnego stanu

Aktualizuj stan, tworząc kopię ze zmienionymi polami, nigdy przez modyfikowanie starego obiektu.

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

Zdarzenia płyną w górę, stan płynie w dół

To podstawa jednokierunkowego przepływu danych:

  • Stan płynie w dół z ViewModel do interfejsu użytkownika.
  • Zdarzenia płyną w górę z interfejsu użytkownika do ViewModel za pomocą wywołań funkcji.

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat udostępniania stanu.

Podsumowanie

Nauczyłeś się:

  • Przechowywać prywatny MutableStateFlow i udostępniać tylko do odczytu StateFlow.
  • Grupować powiązane pola w klasie danych stanu interfejsu użytkownika.
  • Aktualizować stan za pomocą copy() i update {}.
  • Stan płynie w dół, a zdarzenia w górę.

Często zadawane pytania

Czy lekcja „Udostępnianie stanu z ViewModel” jest bezpłatna?

Tak — pełny tekst „Udostępnianie stanu z ViewModel” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Udostępnianie stanu z ViewModel”?

Steruj interfejsem Compose za pomocą ViewModel Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Android Academy?

Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Udostępnianie stanu z ViewModel”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?

Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego warto używać ViewModel?
  2. Udostępnianie stanu z ViewModel
  3. Cykl życia Androida
  4. collectAsStateWithLifecycle
← Powrót do Android Academy