#android #kotlin #mvvm #android-jetpack-compose #android-viewmodel
Вопрос:
У меня есть следующий поток: при запуске приложения отображается экран с популярными элементами. Пользователь входит в систему, при успешном входе в систему открывается backstack, и пользователь возвращается на экран с популярными элементами. Но при входе в систему также должны отображаться элементы, которые пользователю понравились/посмотрели в последний раз.
В режиме без создания я бы просто повторно запустил функцию в ViewModel, которая получает все элементы. Но в Compose я оказался бы в бесконечном цикле, если бы попытался вызвать функцию из Composable.
Мой вопрос — как я могу перезагрузить элементы после того, как пользователь вернется после успешного входа в систему на начальный экран? И какова наилучшая практика в таком случае?
Модель представления
private val _itemsFlow = MutableStateFlow(emptyList())
val itemsFlow: StateFlow<List<Item>> = _itemsFlow
init {
getItems()
}
private fun getItems() {
viewModelScope.launch {
itemRepository.getItems().collect { items ->
_itemsFlow.value = items
}
}
}
Составная
@Composable
fun Home(viewModel: HomeViewModel = hiltViewModel()) {
val items by viewModel.itemsFlow.collectAsState()
...
// used later in a LazyRow
}
Ответ №1:
Проверьте побочные эффекты
В вашем случае что-то подобное поможет:
LaunchedEffect(Unit) {
viewModel.getItems()
}