Back to questions
Junior — Middle
65
Каким образом можно реализовать загрузку списка данных в архитектуре MVI?
Answer from AI
sobes.tech AI
В архитектуре MVI (Model-View-Intent) загрузка списка данных обычно реализуется через следующие шаги:
- Intent — пользовательское действие или событие, например, запрос загрузки списка.
- Model — обработка интента, например, вызов репозитория или use case, который загружает данные (из сети или базы).
- ViewState — формирование состояния представления, которое содержит загруженный список и статус загрузки (загрузка, успех, ошибка).
- View — подписывается на изменения ViewState и отображает список или индикатор загрузки.
Пример на Kotlin с использованием Flow:
sealed class Intent {
object LoadList : Intent()
}
data class ViewState(
val isLoading: Boolean = false,
val items: List<String> = emptyList(),
val error: String? = null
)
class ViewModel {
private val _state = MutableStateFlow(ViewState())
val state: StateFlow<ViewState> = _state
fun processIntent(intent: Intent) {
when (intent) {
is Intent.LoadList -> loadData()
}
}
private fun loadData() {
_state.value = _state.value.copy(isLoading = true, error = null)
// Имитация загрузки
viewModelScope.launch {
try {
val data = repository.getList() // suspend функция
_state.value = ViewState(isLoading = false, items = data)
} catch (e: Exception) {
_state.value = ViewState(isLoading = false, error = e.message)
}
}
}
}
Таким образом, загрузка списка происходит через обработку интента, обновление состояния и реактивное обновление UI.