Форум для тех, кто программирует под Android
Anonymous
Получить текущий экран в навигационной безопасности Jetpack Compose
Сообщение
Anonymous » 03 июл 2024, 04:41
Экраны
Код: Выделить всё
@Serializable
sealed class Screen {
@Serializable
data object Home : Screen()
@Serializable
data class Profile(val name: String) : Screen()
}
Настройка навигации
Код: Выделить всё
@Composable
fun AppNavigation(
modifier: Modifier = Modifier,
startDestination: Screen = Screen.Home,
navController: NavHostController = rememberNavController()
) {
val currentNavBackStackEntry: NavBackStackEntry? by navController.currentBackStackEntryAsState()
// Error
val currentScreen: Screen = currentNavBackStackEntry?.toRoute() ?: Screen.Home
val navGraph = navController.createGraph(
startDestination = startDestination,
) {
composable {
HomeScreen(onNavigateToProfile = { navController.navigate(it) })
}
composable { navBackStackEntry ->
val profile = navBackStackEntry.toRoute()
ProfileScreen(name = profile.name)
}
}
NavHost(navController = navController, graph = navGraph, modifier = modifier)
}
Я пытаюсь получить текущий экран из набора реактивного ранца навигационного типа. Но toRoute() используется только с маршрутами в навигационном графе.
Подробнее здесь:
https://stackoverflow.com/questions/786 ... ck-compose
1719970907
Anonymous
Экраны [code]@Serializable sealed class Screen { @Serializable data object Home : Screen() @Serializable data class Profile(val name: String) : Screen() } [/code] Настройка навигации [code]@Composable fun AppNavigation( modifier: Modifier = Modifier, startDestination: Screen = Screen.Home, navController: NavHostController = rememberNavController() ) { val currentNavBackStackEntry: NavBackStackEntry? by navController.currentBackStackEntryAsState() // Error val currentScreen: Screen = currentNavBackStackEntry?.toRoute() ?: Screen.Home val navGraph = navController.createGraph( startDestination = startDestination, ) { composable { HomeScreen(onNavigateToProfile = { navController.navigate(it) }) } composable { navBackStackEntry -> val profile = navBackStackEntry.toRoute() ProfileScreen(name = profile.name) } } NavHost(navController = navController, graph = navGraph, modifier = modifier) } [/code] Я пытаюсь получить текущий экран из набора реактивного ранца навигационного типа. Но toRoute() используется только с маршрутами в навигационном графе. Подробнее здесь: [url]https://stackoverflow.com/questions/78696229/get-current-screen-in-navigation-type-safety-jetpack-compose[/url]