Когда я должен сделать вызов API во время навигации с одного экрана к другому в JetPack Compose (ViewModel на экран)?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Когда я должен сделать вызов API во время навигации с одного экрана к другому в JetPack Compose (ViewModel на экран)?

Сообщение Anonymous »

Я работаю над приложением Android Compose, которое отображает список поездов.
У меня есть экран A, на котором показан список поездов и экрана B, который отображает детали выбранного поезда.
Каждый экран имеет свой собственный ViewModel (используя HiltViewModel ()). и приносит список поездов через API. < /li>
Пользовательские нажатия на поезд. Принесите полные данные поезда? < /p>

На экране A перед навигацией и передайте данные B? ViewModel)? @Composable
fun TrainListScreen(navController: NavController, viewModel: TrainListViewModel = hiltViewModel()) {
val state by viewModel.trainList.collectAsState()

LazyColumn {
items(state.trains) { train ->
Text(
text = train.name,
modifier = Modifier.clickable {
navController.navigate("trainDetail/${train.number}")
}
)
}
}
}
< /code>
Навигационная настройка < /p>
NavHost(navController, startDestination = "trainList") {
composable("trainList") { TrainListScreen(navController) }
composable(
"trainDetail/{trainNumber}",
arguments = listOf(navArgument("trainNumber") { type = NavType.StringType })
) { backStackEntry ->
val trainNumber = backStackEntry.arguments?.getString("trainNumber") ?: ""
TrainDetailScreen(trainNumber)
}
}
< /code>
Экран B (подробная информация о поездке) < /p>
@Composable
fun TrainDetailScreen(
trainNumber: String,
viewModel: TrainDetailViewModel = hiltViewModel()
) {
val state by viewModel.trainDetail.collectAsState()

LaunchedEffect(trainNumber) {
viewModel.loadTrainDetail(trainNumber)
}

if (state.isLoading) {
CircularProgressIndicator()
} else {
Text("Train Name: ${state.train?.name}")
// show more details
}
}
< /code>
Какой экран должен нести ответственность за вызов API? Запущенным образом является ли правильный способ сделать API?

Подробнее здесь: https://stackoverflow.com/questions/796 ... ther-in-je
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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