Serialización y Navegación en Jetpack Compose
Clase 18 de 20 • Curso de Patrones MVVM en Android
Resumen
La serialización en Jetpack Compose permite que los datos complejos se manejen con eficacia al navegar entre pantallas. Esto se logra transformando objetos a un formato que puede ser fácilmente desglosado y reconstruido durante la transmisión. Cuando los datos son serializables, la UI puede recibir y representar adecuadamente la información visualmente, asegurando una experiencia de usuario fluida.
Ventajas de la serialización:
- Transformación y visualización de datos: Se garantiza que los datos necesarios se presenten correctamente en la UI.
- Compatibilidad: Mejora la integridad y precisión de los datos a través de la infraestructura de Jetpack Compose.
Implementación de la serialización en código
En este ejemplo, convertimos una clase de rutas en una data class
que puede recibir propiedades esenciales:
data class SearchScreenRoute(
val mealName: String,
val dayOfMonth: Int,
val month: Int,
val year: Int
)
De esta manera, aseguramos que al navegar a la pantalla de búsqueda, se envíen los argumentos específicos necesarios para ejecutar nuestros casos de uso correctamente.
¿Cómo se pasan datos entre pantallas en Jetpack Compose?
Jetpack Compose ofrece varias metodologías para pasar datos entre pantallas:
- Uso de rutas con argumentos serializables: Ideal para transmitir datos complejos.
- Shared ViewModel: Una solución efectiva para compartir datos entre composables que comparten un contexto.
- Parcelable: Permite pasar objetos personalizados entre componentes de Android.
- Saved State Handle: Se utiliza comúnmente para preservar y restaurar datos de estado simple.
Ejemplo práctico de paso de datos
Cuando navegamos desde una pantalla de vista previa hacia una pantalla de búsqueda, podemos pasar datos usando el siguiente enfoque de serialización:
NavHostController.navigate(
"searchScreenRoute/${mealName}/${dayOfMonth}/${month}/${year}"
)
La pantalla de destino puede entonces recuperar estos datos de la siguiente manera:
val args = navBackStackEntry.arguments
val mealName = args?.getString("mealName").orEmpty()
val dayOfMonth = args?.getInt("dayOfMonth")
val month = args?.getInt("month")
val year = args?.getInt("year")
¿Cómo construimos componentes dinámicos de UI en Jetpack Compose?
Crear componentes UI dinámicos y personalizados en Jetpack Compose es sencillo gracias a su enfoque basado en funciones. A continuación, se ofrece un ejemplo para crear y personalizar un elemento de lista que muestra información de alimentos con diseño adaptativo:
@Composable
fun TrackedFoodItem(
trackedFood: TrackedFood,
onDeleteClick: () -> Unit,
modifier: Modifier = Modifier
) {
Row(
modifier = modifier
.clip(RoundedCornerShape(5.dp))
.background(MaterialTheme.colors.surface)
.shadow(1.dp)
.padding(horizontal = 16.dp)
.height(100.dp)
) {
// La imagen y más elementos de UI van aquí
}
}
Personalización de UI
- Espaciados y Alineaciones: Configuración de
raw
ycolumn
para gestionar una correcta disposición, usandohorizontalAlignment
yverticalAlignment
. - Utilización de imágenes externas: Implementación de Coil para cargar imágenes desde URLs.
- Manejo de acciones del usuario: Incorporación de iconos interactivos que permiten eliminar elementos según la acción del usuario.
Recomendación: Aprovecha la serialización para asegurar que cada componente UI recibe y usa los datos correspondientes de manera efectiva en la navegación.
Invitamos a nuestros lectores y estudiantes a seguir explorando y aprendiendo más sobre estos principios en sus propios proyectos, logrando así una aplicación robusta y reactiva con Jetpack Compose.