2/11/21 08:57 Estado en Jetpack Compose
Estado en Jetpack Compose
Todas las aplicaciones de Android muestran el estado al usuario. Algunos ejemplos de estado en aplicaciones de
Android:
Mostrar AlertDialog cuando se realiza algún trabajo
Todas las animaciones que aparecen en la aplicación.
https://ichi.pro/es/estado-en-jetpack-compose-266910140781634 1/32
2/11/21 08:57 Estado en Jetpack Compose
Abrir o cerrar NavigationDrawer o BottomSheet
Como sabes, Jetpack Compose es un marco declarativo que usa funciones componibles para renderizar la interfaz
de usuario. Esto significa que para actualizar el estado de la aplicación debemos llamar a la función componible
con nuevos argumentos. Por ejemplo, necesitamos mostrar la actualización del texto de saludo de acuerdo con la
entrada de los usuarios.
@Composable
fun GreetingBox() {
Column {
Text(text = "Hello, ")
OutlinedTextField(value = "", onValueChange = {
})
Eso es porque establecemos un valor constante en TextField y en cada recomposición nuestro texto estará vacío.
Tal vez piense que podemos crear alguna variable que almacene nuestro texto y luego pase al valor de TextField.
Intentemos esto y veamos qué pasa.
https://ichi.pro/es/estado-en-jetpack-compose-266910140781634 2/32
2/11/21 08:57 Estado en Jetpack Compose
@Composable
fun GreetingBox() {
var username = ""
Column {
Text(text = "Hello, $username")
OutlinedTextField(value = username, onValueChange = {
username = it
})
@Composable
fun GreetingBox() {
var username by mutableStateOf("")
Column {
Text(text = "Hello, $username")
OutlinedTextField(value = username, onValueChange = {
username = it
})
Crear un objeto de estado durante la composición sin usar recordar
Como mencionamos, Jetpack Compose recompone funciones cada vez que cambia el estado. Esto significa que el
username objeto se volverá a crear en cada recomposición. En nuestro caso, cuando value in TextField change y
Jetpack Compose recomponen nuestro GreetingBox .
Para evitar este problema, necesitamos almacenar el valor en algún lugar que esté libre de recomposición, lo que
guardará su estado a pesar de la recomposición. Para ello en Jetpack Compose, contamos con remember .
Almacenará el valor durante la composición.
Después de esta actualización, nuestro código se verá así:
https://ichi.pro/es/estado-en-jetpack-compose-266910140781634 3/32
2/11/21 08:57 Estado en Jetpack Compose
@Composable
fun GreetingBox() {
var username by remember {
mutableStateOf("")
Column {
Text(text = "Hello, ")
OutlinedTextField(value = username, onValueChange = {
username = it
})
https://ichi.pro/es/estado-en-jetpack-compose-266910140781634 4/32
2/11/21 08:57 Estado en Jetpack Compose
Adicionalmente
Para ello podemos utilizar ViewModel de Architecture Components. ViewModels también está libre del ciclo de vida
de Jetpack Compose y será ideal para esto. Ahora nuestro código se ve así.
class GreetingViewModel : ViewModel() {
private val _userName = MutableLiveData("")
val userName: LiveData<String> = _userName
fun onNameChange(input: String) {
_userName.value = input
@Composable
fun GreetingBox(
vm: GreetingViewModel = viewModel()
) {
val username = vm.userName.observeAsState()
Column {
Text(text = "Hello, ${username.value}")
OutlinedTextField(
value = username.value!!,
onValueChange = vm::onNameChange
https://ichi.pro/es/estado-en-jetpack-compose-266910140781634 5/32
2/11/21 08:57 Estado en Jetpack Compose
Conclusión
Hoy aprendimos cómo aprendimos cómo guardar estados en Jetpack Compose. Podemos almacenar valores libres
de recomposición que deberíamos usar remember y usar un ViewModel también es una buena idea porque no está
ligado al ciclo de vida componible.
No dudes en seguirme en Twitter y no dudes en hacer preguntas relacionadas con Jetpack Compose.
Twitter: https://twitter.com/a_rasul98 (https://twitter.com/a_rasul98)
Gracias por leer, ¡y hasta luego!
YOU MAY LIKE
(https://widgets.adskeeper.com/?
utm_source=widget_adskeeper&utm_medium=text&utm_campaign=add&utm_content=1127595)
(https://www.adskeeper.co.uk/ghits/11165658/i/57461234/2/pp/1/1?
https://ichi.pro/es/estado-en-jetpack-compose-266910140781634 6/32