Navegación de Pantallas en Apps con Jetpack Compose

Clase 5 de 20Curso de Patrones MVVM en Android

Resumen

El sistema de navegación es fundamental. Integrarlo correctamente te permitirá crear experiencias de usuario fluidas. En este caso, vamos a explorar cómo podrías transformar las pantallas preexistentes de un reto en un sistema de navegación fluido, llevándote hasta la pantalla de inicio o "home".

¿Cuáles son las rutas necesarias para el sistema de navegación?

La primera etapa en la creación de un sistema de navegación es definir las rutas necesarias en la aplicación. Esto implica añadir aquellas que están ausentes para completar el conjunto de navegación. Aquí tienes algunas rutas ejemplo basadas en el reto del onboarding:

  1. Welcome Screen Route: La pantalla de bienvenida y el punto de inicio.
  2. Gender Screen Route: Pantalla para capturar género.
  3. Age Screen Route: Recolecta la edad del usuario.
  4. Height Screen Route: Registra la altura del usuario.
  5. Weight Screen Route: Toma el peso del usuario.
  6. Activity Level Screen Route: Evalúa el nivel de actividad física.
  7. Goal Screen Route: Establece las metas a alcanzar.
  8. Nutrient Need Screen Route: Calcula las necesidades nutricionales.
  9. Tracker Overview Screen Route: Destino final del onboarding, donde comienzan los seguimientos de calorías.

Estas rutas sirven como guía dentro del flujo de trabajo para integrar las pantallas secuencialmente.

¿Cómo construir el grafo de navegación?

Una vez definidas las rutas, el siguiente paso es construir el grafo de navegación dentro del proyecto. Esto se realiza creando un archivo en Kotlin—navigationRoot.kt, por ejemplo—y definiendo cómo las pantallas se interconectan:

@Composable
fun NavigationRoot(navController: NavHostController) {
    NavHost(navController = navController, startDestination = "welcome") {
        composable("welcome") { WelcomeScreen() }
        composable("gender") { GenderScreen() }
        composable("age") { AgeScreen() }
        composable("height") { HeightScreen() }
        // Continúa definiendo el resto de las pantallas
    }
}

El NavHost es el componente que actúa como contenedor dinámico en el que se actualizan y presentan las diferentes pantallas. Este utiliza el controlador de navegación para conocer cuál es la pantalla de partida y decide el flujo según las interacciones del usuario.

¿Cómo integrar el sistema en la actividad principal?

Finalmente, es crucial integrar el sistema de navegación dentro de la MainActivity, habilitando así el uso del grafo de navegación en toda la aplicación:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val navController = rememberNavController()
            NavigationRoot(navController)
        }
    }
}

La función rememberNavController() ayuda a recordar el estado de navegación y facilita la transición entre composables. De esta forma, el flujo de la aplicación realmente inicia con la pantalla de bienvenida (WelcomeScreen), asegurando que se navegue adecuadamente a través del módulo de onboarding hasta llegar al homescreen.

¿En qué consiste el método de navegación entre pantallas?

El método de navegación es sumamente importante, y corregir cualquier error en él garantizará el correcto funcionamiento del flujo entre las pantallas. La clave está en asegurarse de que a cada pantalla le correspondan las rutas y métodos que la conecten con la siguiente.

Cuando implementes el sistema, verifica cada método de enlace, asegurándote de que cada nextClick u otra función de navegación se implemente así:

Button(onClick = { navController.navigate("nextScreenRoute") }) {
    Text("Next")
}

Este botón debe encontrarse en cada pantalla, permitiendo la transición hacia la siguiente según su ruta.

¿Qué desafíos debes completar?

Hasta aquí, se te da una idea clara de cómo funciona la navegación en un entorno de Jetpack Compose. Pero el conocimiento teórico no es suficiente: se alienta a que pongas manos a la obra. Tu reto es completar el sistema de navegación, probando y asegurándote de que todas las pantallas funcionen sin problemas.

Recuerda que cada pequeño detalle cuenta. Coraje y entusiasmo te acompañarán mientras continúas aprendiendo y perfeccionando tus habilidades de navegación. ¡Sigue experimentando y avanzando en tu camino como desarrollador!