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
MutableStateFlowi udostępniać tylko do odczytuStateFlow. - Grupować powiązane pola w klasie danych stanu interfejsu użytkownika.
- Aktualizować stan za pomocą
copy()iupdate {}. - 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
- Dlaczego warto używać ViewModel?
- Udostępnianie stanu z ViewModel
- Cykl życia Androida
- collectAsStateWithLifecycle