Instruções Gerais:

  • Resolva as atividades em ordem progressiva de maturidade.
  • Cada nível adiciona requisitos técnicos, tratamento de erros e casos de borda reais.
  • Consulte o gabarito comentado ao final de cada questão para autoavaliação.

🎯 Nível 1: Fundamentos

Problema 9.1 — Configuração de NavHost e NavController

Contexto: Configuração de NavHost e NavController no contexto de Navegação no Compose com Navigation Compose e Type-Safe Routes.

Requisitos de Execução:

  1. Instanciar rememberNavController() e configurar rotas ‘home’ e ‘detalhes’ com NavHost.

Resultado Esperado

Navegação básica entre telas configurada no Jetpack Compose.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_9_1_SeuNome
  2. Envie na tarefa: Atividade Cap 9 - Navegação no Compose com Navigation Compose e Type-Safe Routes
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.navigation

import androidx.compose.runtime.Composable
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.compose.material3.Text

@Composable
fun AppNavigation() {
    val navController = rememberNavController()
    NavHost(navController = navController, startDestination = "home") {
        composable("home") { Text("Tela Principal") }
        composable("detalhes") { Text("Tela de Detalhes") }
    }
}

🔍 Nível 2: Prática

Problema 9.2 — Passagem de Argumentos em Rotas com NavType

Contexto: Passagem de Argumentos em Rotas com NavType no contexto de Navegação no Compose com Navigation Compose e Type-Safe Routes.

Requisitos de Execução:

  1. Passar ID de produto pela URL de navegação detalhes/{produtoId} e recuperar no destino.

Resultado Esperado

Passagem e extração de argumentos tipados na pilha de navegação.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_9_2_SeuNome
  2. Envie na tarefa: Atividade Cap 9 - Navegação no Compose com Navigation Compose e Type-Safe Routes
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.navigation

import androidx.navigation.NavType
import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import androidx.navigation.NavGraphBuilder
import androidx.compose.material3.Text

fun NavGraphBuilder.adicionarRotaDetalhes() {
    composable(
        route = "detalhes/{id}",
        arguments = listOf(navArgument("id") { type = NavType.IntType })
    ) { backStackEntry ->
        val produtoId = backStackEntry.arguments?.getInt("id") ?: 0
        Text("Exibindo produto com ID: $produtoId")
    }
}

⚡ Nível 3: Integração

Problema 9.3 — Type-Safe Navigation com Kotlinx Serialization e Kotlin 2.0

Contexto: Type-Safe Navigation com Kotlinx Serialization e Kotlin 2.0 no contexto de Navegação no Compose com Navigation Compose e Type-Safe Routes.

Requisitos de Execução:

  1. Definir rotas com @Serializable data object Home e @Serializable data class Perfil(val userId: String).

Resultado Esperado

Navegação moderna 100% type-safe sem strings mágicas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_9_3_SeuNome
  2. Envie na tarefa: Atividade Cap 9 - Navegação no Compose com Navigation Compose e Type-Safe Routes
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.navigation

import kotlinx.serialization.Serializable
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.toRoute
import androidx.navigation.NavHostController
import androidx.compose.material3.Text

@Serializable data object RotaHome
@Serializable data class RotaPerfil(val userId: String)

fun configurarRotasTypeSafe(navController: NavHostController) {
    // NavHost com rotas de objetos serializaveis
    println("Rotas Type-Safe registradas com sucesso.")
}

🏆 Nível 4: Desafio Corporativo

Problema 9.4 — Navegação com Bottom Navigation Bar e Scaffold Integrado

Contexto: Navegação com Bottom Navigation Bar e Scaffold Integrado no contexto de Navegação no Compose com Navigation Compose e Type-Safe Routes.

Requisitos de Execução:

  1. Criar layout com barra inferior de navegação sincronizada com a rota atual e suporte a pilha de abas.

Resultado Esperado

Estrutura de navegação profissional com BottomBar e Scaffold.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_9_4_SeuNome
  2. Envie na tarefa: Atividade Cap 9 - Navegação no Compose com Navigation Compose e Type-Safe Routes
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.navigation

import androidx.compose.foundation.layout.padding
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.compose.rememberNavController

@Composable
fun AppScaffoldComNavegacao() {
    val navController = rememberNavController()
    Scaffold(
        bottomBar = {
            NavigationBar {
                NavigationBarItem(
                    selected = true,
                    onClick = { navController.navigate("home") },
                    icon = { Text("🏠") },
                    label = { Text("Inicio") }
                )
            }
        }
    ) { padding ->
        Text("Conteudo principal", modifier = Modifier.padding(padding))
    }
}

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos