Проблема
В моем приложении есть три вложенных навигационных графика: HomeGraph, ProfileGraph и MenuGraph. Я хочу добиться того, чтобы при переходе между этими графиками через BottomNavigationBar каждый из них должен сохранять свое состояние и правильно добавляться в стек приложения, чтобы это не повлияло на UX. Но когда я использую этот метод в официальной документации, он сохраняет только состояние HomeGraph, а не остальные. Я хочу, чтобы он сохранял и восстанавливал все элементы TopLevelDestination
Вот минимальный проект воспроизводителя: https://github.com/sevbanBayir/NestedGraphExp
Метод, рекомендованный в документации, и который я использовал для сохранения состояния навигации между экранами:
fun NavController.navigateToTopLevelDestination(topLevelDestination: TopLevelDestination) {
navigate(topLevelDestination.route) {
popUpTo(graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
}
Мои настройки навигации:
NavHost(
navController = navController,
startDestination = Destination.HomeDestination.HomeGraph,
modifier = Modifier.padding(padding)
) {
homeGraph(navController)
profileGraph(navController)
menuGraph(navController)
}
И каждый график выглядит так:
fun NavGraphBuilder.homeGraph(navController: NavController) {
navigation(startDestination = HomeDestination.Home1) {
composable {
Column(
Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(HomeDestination.Home1.toString())
Button(onClick = { navController.navigate(HomeDestination.Home2) }) {
Text("Next")
}
}
}
composable {
Column(
Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(HomeDestination.Home2.toString())
Button(onClick = { navController.navigate(HomeDestination.Home3) }) {
Text("Next")
}
}
}
composable {
Column(
Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(HomeDestination.Home3.toString())
}
}
}
}
Наконец, это мои определения TopLevelDestination:
enum class TopLevelDestination(val route: Destination, val icon: ImageVector) {
HOME(Destination.HomeDestination.HomeGraph, icon = Icons.Default.Home),
PROFILE(Destination.ProfileDestination.ProfileGraph, icon = Icons.Default.Person),
MENU(Destination.MenuDestination.MenuGraph, icon = Icons.Default.Menu)
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... vel-states
При переходе к пункту назначения верхнего уровня не сохраняются все состояния верхнего уровня. ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение