🤖 Как правильно загружать данные для UI через ViewModel (RU,20м)
Я видел разные вариации загрузки данных через ViewModel
, чтобы они "быстрее показались на UI": запуск в init блоке ViewModel
, запуск загрузки из LaunchedEffect
из Composable или из Fragment
коллбека. Я за самый правильный путь - использование холодных стримов данных, которые запустят в момент появление клиента для отображения данных из них. Все эти ранние прогревы экономят очень мало по сравнению с длинной запроса. Рекомендую почитать статью, где автор описал все лучшие практики по загрузке.
class UserAccountDetailsViewModel(
private val getUserDetailsUseCase: GetUserDetailsUseCase = GetUserDetailsUseCase.create(),
) : ViewModel() {
val userDetails: Flow = flow {
emit(
getUserDetailsUseCase.execute()
.fold(
onSuccess = { ViewState(...) },
onFailure = { ViewState(...) }
)
)
}.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5_000), // Важно
ViewState(isLoading = true, isError = false)
)
}
Что еще полезно в статье:
👉 Как suspend вызов превратить в Flow
👉 Как делать принудительное обновление
👉 Условная загрузка
#android #архитектура