Отображаются ранее выбранные данные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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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