es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con tu código es que la variable loginStatus está definida dentro del bloque init de la clase LoginViewModel. Por lo tanto, no es accesible desde la clase MainActivity.

    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:

    class LoginViewModel: ViewModel() {
        var loginStatus: Boolean = false
    
        init {
            if (Firebase.auth.currentUser != null) {
                loginStatus = true
            }
        }
    }
    

    En el código anterior, loginStatus se define como una variable de nivel de clase pública con un valor inicial de false. El bloque init de la clase establece el valor de loginStatus en true si hay un usuario autenticado actualmente.

    Ahora, en la clase MainActivity, puedes acceder a la variable loginStatus utilizando la instancia loginViewModel:

    class MainActivity() : AppCompatActivity() {
    
        private val loginViewModel: LoginViewModel by viewModels()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            if (loginViewModel.loginStatus) {
                println("login true")
            }
        }
    }
    

    En el código anterior, se utiliza la instancia loginViewModel para acceder a la variable loginStatus, que ahora se puede acceder porque se define como una variable de nivel de clase pública.

Comments are closed.