Sobes.tech
Back to questions
Junior — Middle
65

Каким образом можно реализовать загрузку списка данных в архитектуре MVI?

Answer from AI

sobes.tech AI

В архитектуре MVI (Model-View-Intent) загрузка списка данных обычно реализуется через следующие шаги:

  1. Intent — пользовательское действие или событие, например, запрос загрузки списка.
  2. Model — обработка интента, например, вызов репозитория или use case, который загружает данные (из сети или базы).
  3. ViewState — формирование состояния представления, которое содержит загруженный список и статус загрузки (загрузка, успех, ошибка).
  4. 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.