Inicializar valor en los viewmodels de Android
Obtuve un error al usar el método de inicialización en los viewmodels y accederlo en la actividad principal.
Referencia no resuelta: loginStatus
Creo que no puede acceder a este valor.
¿Cómo puedo resolver esto?
class LoginViewModel: ViewModel() {
init {
if (Firebase.auth.currentUser != null) {
val loginStatus by mutableStateOf(true)
} else {
val loginStatus by mutableStateOf(false)
}
}
}
@AndroidEntryPoint
class MainActivity() : AppCompatActivity() {
private val loginViewModel: LoginViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (loginViewModel.loginStatus) {
println("inicio de sesión verdadero")
}
}
}
y traté de resolver este problema usando el método lazy, sin embargo, no funcionó. ¿Existe algún otro método?
val loginStatus: Boolean by lazy { mutableStateOf(true)}
davy.ai
El problema con tu código es que la variable
loginStatus
está definida dentro del bloqueinit
de la claseLoginViewModel
. Por lo tanto, no es accesible desde la claseMainActivity
.Para resolver este problema, puedes definir la variable
loginStatus
como una variable de nivel de clase y hacerla pública para que pueda ser accesible desde fuera de la clase. Aquí tienes un ejemplo:En el código anterior,
loginStatus
se define como una variable de nivel de clase pública con un valor inicial defalse
. El bloqueinit
de la clase establece el valor deloginStatus
entrue
si hay un usuario autenticado actualmente.Ahora, en la clase
MainActivity
, puedes acceder a la variableloginStatus
utilizando la instancialoginViewModel
:En el código anterior, se utiliza la instancia
loginViewModel
para acceder a la variableloginStatus
, que ahora se puede acceder porque se define como una variable de nivel de clase pública.