Seguridad

Solución: el error de tipo Jetpack Compose ObservAsAsState no tiene método

Con Jetpack Compose como nueva tecnología, habrá bultos y golpes, especialmente en las herramientas. Esta breve publicación de blog lo ayudará a solucionar el error «El estado del tipo no tiene método getValue» la primera vez que observe el estado en su ViewModel.

Si sigue el código de muestra en la documentación de estado oficial de ViewModel, terminará con un código como el siguiente:

class HelloViewModel : ViewModel() 
    private val _name = MutableLiveData("")
    val name: LiveData<String> = _name


@Composable
fun HelloScreen(helloViewModel: HelloViewModel = viewModel()) 
    // name is the current value of [helloViewModel.name]
    // with an initial value of ""
    val name: String by helloViewModel.name.observeAsState("")
    // etc

Los primeros errores que obtiene son sobre dependencias faltantes, que se pueden solucionar fácilmente agregando (Asegúrese de estar utilizando las últimas versiones. Este fragmento no está actualizado):

implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha02"

Pero luego ocurre el error más confuso:

El tipo ‘Estado’ no tiene método ‘getValue (¿Nada?, KProperty <*>) ‘y, por tanto, no puede actuar como delegado

Publicaciones relacionadas

Realmente no hay una solución obvia (y gracias Florina por señalarme esto!). Aquí la herramienta no se ha puesto al día con la codificación. El IDE no puede ofrecerle una solución rápida.

Debe importar el método getValue para poder usarlo:

import androidx.compose.runtime.getValue

Sus importaciones pueden diferir, pero tenga en cuenta la importación azul resaltada, recién agregada (manualmente) para getValue:

¡Eso es! Los garabatos rojos de la compilación desaparecen y puede continuar con Jetpack Compose, ViewModel y el estado de observación.

¡Disfrutar!

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba