Ответ
Стейт-машина в MVI (Model-View-Intent) — это концепция, где состояние экрана (State) изменяется предсказуемо в ответ на события (Intents) через чистые функции (редьюсеры). Каждое новое состояние — это неизменяемый объект, который View отображает.
Пример:
data class LoginState(
val isLoading: Boolean = false,
val error: String? = null,
val isSuccess: Boolean = false
)
fun reduce(oldState: LoginState, intent: LoginIntent): LoginState {
return when (intent) {
is LoginIntent.Submit -> oldState.copy(isLoading = true)
is LoginIntent.Error -> oldState.copy(isLoading = false, error = intent.message)
is LoginIntent.Success -> oldState.copy(isLoading = false, isSuccess = true)
}
}
Ключевые моменты:
- Состояние иммутабельно.
- Изменения только через редьюсеры.
- Предсказуемость: одинаковый интент + состояние = одинаковый результат.