Предоставление состояния интерфейса как StateFlow
Публикуйте единый источник истины для экрана
«Предоставление состояния интерфейса как StateFlow» — бесплатный урок Kotlin Multiplatform Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Multiplatform Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Multiplatform Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
One Source of Truth
Your screen needs a single, reliable picture of its data. A StateFlow gives you exactly that: one observable value the UI can trust.
Model the Screen as State
Bundle everything the screen shows into one immutable data class. Loading, data and errors all live together in a single object.
data class HomeState(
val isLoading: Boolean = false,
val name: String = ""
)Keep a Private MutableStateFlow
Inside the ViewModel hold a private MutableStateFlow. Only your code may change it, so state stays controlled and predictable.
private val _state =
MutableStateFlow(HomeState())Expose a Read-Only View
Publish it as a read-only StateFlow. The UI can collect values but can never write to it directly. Encapsulation, kept clean.
val state: StateFlow<HomeState> =
_state.asStateFlow()It Always Has a Value
Unlike a plain Flow, a StateFlow always holds a current value. New collectors instantly get the latest state, no waiting.
Update with .update
Change state safely using update. It copies the current value and applies your change atomically, even across threads.
_state.update { it.copy(isLoading = true) }copy Keeps It Immutable
Because the state is a data class, copy produces a fresh object with one field changed. Old state is never mutated in place.
Load Data, Then Emit
Launch a coroutine, fetch your data, then emit the new state. The UI re-renders automatically when the value changes. ✨
scope.launch {
val name = repo.greet()
_state.update { it.copy(name = name) }
}StateFlow vs LiveData
Android devs know LiveData, but it is JVM-only. StateFlow works on every KMP target, so it is the portable choice.
Read the Value Directly
Need the current state without collecting? Just read .value. Handy for tests or one-off checks inside the ViewModel.
val current = _state.valueThe UI Stays Dumb
The screen only collects state and draws it. All decisions stay in shared code, so both apps behave identically.
Quick Check
Let's confirm why we split mutable and read-only flows.
Recap
Bundle screen data in a state class, hold it in a private MutableStateFlow, and expose a read-only StateFlow the UI just observes. 🚀
Часто задаваемые вопросы
Урок «Предоставление состояния интерфейса как StateFlow» бесплатный?
Да — полный текст урока «Предоставление состояния интерфейса как StateFlow» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Multiplatform Academy, подпишись на CoddyKit PRO. Курс Kotlin Multiplatform Academy содержит 4 уроков всего.
Чему я научусь в уроке «Предоставление состояния интерфейса как StateFlow»?
Публикуйте единый источник истины для экрана Ты практикуешь Kotlin Multiplatform Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Multiplatform Academy?
Предыдущий опыт не требуется. Kotlin Multiplatform Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Предоставление состояния интерфейса как StateFlow»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Multiplatform Academy?
Да. Каждый урок Kotlin Multiplatform Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Кроссплатформенная основа ViewModel
- Предоставление состояния интерфейса как StateFlow
- Обработка намерений и действий пользователя
- Привязка ViewModel к каждому интерфейсу