Sobes.tech
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:

  1. 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)
}
  1. 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.
  2. 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.
  3. 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.