Отображаются ранее выбранные данныеAndroid

Форум для тех, кто программирует под Android
Anonymous
Отображаются ранее выбранные данные

Сообщение Anonymous »

У меня есть эта функция в Kotlin, которая извлекает сведения о поезде в зависимости от того, запрашивает ли пользователь текущий статус или расписание. если расписание, то из базы данных помещений, если живое, то из API.
Этот код слишком велик для Composable или мне следует перенести его в viewModel?

Код: Выделить всё

    @Composable
fun getDataFromRoomAndApi(
clickedTrain: ClickedTrainDetails,
): List {

val roomViewModel: RoomViewModel = hiltViewModel()
val viewModel: RetroViewModel = hiltViewModel()

var selectedTrain by remember { mutableStateOf(emptyList()) }
var isLoading by remember { mutableStateOf(false) }

val trainSchStat = roomViewModel.trainSchPaged.collectAsLazyPagingItems()
val roomTrainSch = trainSchStat.itemSnapshotList.firstOrNull()
val trainLiveStatus by viewModel.trainStatus.collectAsState()

LaunchedEffect(clickedTrain.clickedTrain, clickedTrain.live) {
isLoading = true
selectedTrain = emptyList() // Clear previous data immediately

clickedTrain.clickedTrain?.let { roomViewModel.setTrainNumber(it) }
if (clickedTrain.live == true) {
clickedTrain.clickedTrain?.let { viewModel.fetchTrainStatus(it) }
}
}
when {
clickedTrain.live == true -> {
when (val status = trainLiveStatus) {
is ViewState.Loading -> {
// Handle loading state if needed
}

is ViewState.Success -> {
val apiData = status.data
if (roomTrainSch != null) {
selectedTrain = mapRoomDataToApiListData(roomTrainSch, apiData)
}
isLoading = false
}

is ViewState.Error -> {
selectedTrain = emptyList()
isLoading = false
}
}
}

else -> {
// Handle non-live data (room data only)
if (roomTrainSch != null) {
selectedTrain = listOf(roomTrainSchToTrainSch(roomTrainSch))
}
isLoading = false
}
}
return if (isLoading) emptyList() else selectedTrain
}
Он работает хорошо, но что бы ни нажимал пользователь, данные о последнем нажатии отображаются в течение секунды, а затем новые данные.

Подробнее здесь: https://stackoverflow.com/questions/788 ... -displayed

Вернуться в «Android»