Junior — Middle
Quais métodos podem ser utilizados para implementar a transferência de dados entre telas ao usar a navegação Jetpack Compose?
sobes.tech IA
Resposta da IA
No Jetpack Compose Navigation, existem várias abordagens para passar dados entre telas:
- Argumentos de navegação
- Ao declarar a rota, você pode especificar parâmetros que serão passados para a próxima tela.
- Tipos primitivos e strings são suportados.
- Exemplo de passagem de id:
navController.navigate("detail_screen/$itemId")
composable("detail_screen/{itemId}") { backStackEntry ->
val itemId = backStackEntry.arguments?.getString("itemId")
DetailScreen(itemId)
}
-
Shared ViewModel
- Uso de ViewModel que vive ao nível do gráfico de navegação ou da atividade.
- Ambas as telas acessam a mesma instância de ViewModel e podem trocar dados através dela.
-
Estado (State Hoisting)
- Passagem de estado por meio de parâmetros de funções de telas.
- Adequado para pequenos volumes de dados e quando as telas estão no mesmo componente.
-
Salvar dados em NavBackStackEntry.savedStateHandle
- Você pode colocar dados em savedStateHandle antes de retornar à tela anterior.
- Permite devolver dados.
Exemplo de uso de savedStateHandle:
// Enviar dados de volta
navController.currentBackStackEntry?.savedStateHandle?.set("key", value)
// Obter dados na tela anterior
val savedStateHandle = navController.previousBackStackEntry?.savedStateHandle
val value = savedStateHandle?.get<String>("key")
Portanto, a escolha do método depende do tipo e do volume de dados, bem como da arquitetura da aplicação.