NavController не обновляет местоположения в Jetpack Compose

Я создал NavigationRail для своего новостного приложения, которое позволяет мне переходить к экрану поиска и домашнему экрану. У меня проблема с тем, что NavController, который я передал своему NavigationRail, не дает мне обновленную текущую позицию, из-за которой мои значки navigationRail не показывают, что они выбраны в пункте назначения.

NavController не обновляет местоположения в Jetpack Compose

Код для моей навигационной панели:

@Composable
fun NewsNavigationRail(
    navController: NavHostController
){

    val navigationItems = Destinations.values()

    NavigationRail{
        navigationItems.filter{
            it.icon != null && it.label != null
        }.forEach {
            NavigationRailItem(
                icon = { Icon(
                    it.icon!!,
                    contentDescription = it.name
                ) },


// problematic line --------------------------
                selected = navController.currentDestination?.route == it.route,
                onClick = {

                },
                label = { Text(it.label!!) }
            )
        }
    }
}

И код для моего NavigationHost:

@OptIn(ExperimentalMaterialApi::class)
@Composable
fun NavigationHost(){

    val navController = rememberNavController()

    Row {
        NewsNavigationRail(
            navController = navController
        )

        NavHost(navController = navController, startDestination = Destinations.HomeScreen.route){
            composable(Destinations.HomeScreen.route){
                val newsViewModel = hiltViewModel<NewsViewModel>()
                HomeScreen(newsViewModel, navController)
            }
            composable(
                "${Destinations.NewsScreen.route}/{url}",
                arguments = listOf(navArgument("url"){
                    type = NavType.StringType
                })
            ){
                val url = it.arguments?.getString("url")
                NewsScreen(url)
            }
            composable(Destinations.SearchScreen.route){
                val newsViewModel = hiltViewModel<NewsViewModel>()
                SearchScreen()
            }
        } 
    }
}

Вы можете перемещаться между экранами? Может быть, проблема в эффекте пульсации значка?

commandiron 31.03.2022 02:27

Да, я могу перемещаться между экранами.

Anurag Singh 31.03.2022 17:23

Можете ли вы изменить unselectedContentColor и selectedContentColor в NavigationRail?

commandiron 01.04.2022 09:41

Я пробовал, но это не работает

Anurag Singh 01.04.2022 18:34

Можете ли вы опубликовать класс Destination, я подозреваю, что у вас есть аргументы на экране новостей, которые могут повлиять на имя, вы пробовали без аргументов

commandiron 01.04.2022 19:32

И можете ли вы получить текущий маршрут с помощью этого кода; val navBackStackEntry с помощью navController.currentBackStackEntryAsState() val currentRoute = navBackStackEntry?.destination?.route

commandiron 01.04.2022 19:34

Да, это сработало. Большое спасибо, чувак, это беспокоило меня несколько дней !!

Anurag Singh 03.04.2022 15:26

Отличная работа! можешь принять мой ответ. я добавляю в качестве ответа.

commandiron 04.04.2022 09:07
1
8
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это,

val navBackStackEntry by navController.currentBackStackEntryAsState() 
val currentRoute = navBackStackEntry?.destination?.route

Другие вопросы по теме