🧩 Exercícios - Cap 11: Navegação entre Fases (Menus)

📖 Ver Cap 11

🎯 Antes de começar

No Cap 11 você criou o NavegadorDoJogo() com NavHost + composable(...), e nas Práticas Obrigatórias montou as rotas "inicio""arena""vitoria" com navController.navigate(...) e popBackStack(). Depois de completar as duas Práticas, faça o exercício extra abaixo para conhecer popUpTo, que controla o histórico de navegação.


💪 Exercício Extra 1: Botão “Menu Principal” com popUpTo (20 min)

Objetivo: Praticar popUpTo, que limpa telas do histórico ao navegar — evitando que o jogador acumule um “empilhado” de telas antigas.

Passos:

  1. Na tela "vitoria", abaixo do botão “Voltar”, adicione um segundo botão:
    Button(onClick = {
        navController.navigate("inicio") {
            popUpTo("inicio") { inclusive = false }
        }
    }) {
        Text("Menu Principal")
    }
    
  2. Rode o app, siga o fluxo "inicio""arena""vitoria".
  3. Na tela "vitoria", toque em “Menu Principal”.
  4. Agora pressione o botão Voltar do celular/emulador.

✅ Resultado Esperado


🆘 Resolução de Problemas Comuns

Erro Causa Solução
Unresolved reference: popUpTo popUpTo é usado dentro do bloco { } de navigate(...), não como função separada Confirme a sintaxe navController.navigate("inicio") { popUpTo("inicio") { inclusive = false } }
App fecha imediatamente ao abrir Trocou o startDestination por engano, ou apagou a rota "inicio" Confirme que NavHost(... startDestination = "inicio") e que composable("inicio") { ... } ainda existe
Botão “Voltar” não fecha o app, volta para “vitoria” popUpTo não foi aplicado, ou inclusive está com valor errado Revise se o botão “Menu Principal” usa o bloco popUpTo("inicio") { inclusive = false } exatamente como no exemplo

⬅️ Voltar para Exercícios