Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Cannot access 'backQueue': it is invisible (private in a supertype) in 'NavHostController'

Bom dia a todos

Eu estou usando uma versão mais atualizada do Navigation, a 2.6.0, ao invés da versão 2.5.3, usada na aula. E nessa versão mais atual (no presente dia da postagem(julho de 2023)) a variável backQueue está privada, e caso tente utilizar, aparece essa mensagem:

Cannot access 'backQueue': it is invisible (private in a supertype) in 'NavHostController'

Pelo que eu li neste fórum e no IssueTracker do google a backQueue está privada por ser instável e por isso não irá retornar. E pelo que se falou no fórum, podemos substituir o backQueue pelo currentBackStack.

Originalmente o código era assim:

            LaunchedEffect(Unit) {
                navController.addOnDestinationChangedListener{ _, _, _ ->
                    val routes = navController.backQueue.map {
                        it.destination.route
                    }
                    Log.i("MainActivity", "onCreate: back stack - $routes")
                }
            }

E ficou desse jeito:

            LaunchedEffect(Unit){
                navController.addOnDestinationChangedListener { _, _, _ ->
                    val routes = navController.currentBackStack.value.map {
                        it.destination.route
                    }
                    Log.i("MainActivity", "on Create: back stack - $routes")
                }
            }

Ps: eu estou me baseando no que o fórum falou e eu tentei encontrar um equivalente do código da aula. Eu até queria uma confirmação de se o código esse é o melhor jeito de fazer, ou tem algum melhor

Ps2: depois eu percebi que esse código era secundário, apenas para mostrar no log a queue da rota tomada pelo navigate. Mas fica de curiosidade, caso alguém também encontre o mesmo erro

1 resposta
solução!

Olá, Murilo!

Pelo que você pesquisou e encontrou no fórum e no IssueTracker do Google, a variável backQueue está privada na versão 2.6.0 do Navigation e não retornará. No entanto, você encontrou uma solução alternativa sugerida no fórum, que é substituir backQueue por currentBackStack.

Acredito que a substituição que você fez no código seja apropriada, considerando a versão mais recente do Navigation. Agora, ao invés de usar navController.backQueue, você está usando navController.currentBackStack.value, que retorna a lista de destinos na pilha de navegação atual.

É importante mencionar que, como você mencionou, o código que você modificou é secundário e apenas para exibir a fila de destinos no log. Portanto, mesmo que a substituição que você fez seja válida, ela pode não ser necessária para o funcionamento principal da sua aplicação.

Espero que essa informação seja útil para você. Se tiver mais alguma dúvida, é só me dizer! Espero ter ajudado e bons estudos!