Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get context in non composable function (Viewmodel) - Jetpack Compose

Hello developers in a composable function i can get context like this : LocalContext.current but how can i get it from a viewmodel class ???This is my viewmodel:

class LoginViewModel(
    private val _global: GlobalServices = GlobalServices(),
    private val _login:LoginModel= LoginModel(),
    private val _loginService: LoginService =LoginService(),
    private val retrofitService: IRetrofitService = RetrofitService(),
    private val storage:Storage= Storage()
):ViewModel() {
    
    val paddingMain=10.dp
    val isChecked = mutableStateOf(false)
    val disabled =  mutableStateOf(true)
    val iconSize=150.dp
    val signInFail= mutableStateOf(false)
    val showSuccess= mutableStateOf(false)

    val global=_global

    val login= mutableStateOf(_login, policy = neverEqualPolicy())//policiy is set for not create a copy of LoginModel when set state

    fun setEmail(email:String){
        login.value.correo=email
        refreshStateOfLogin()
    }
    fun setPassword(ppassword:String){
        login.value.password=ppassword
        refreshStateOfLogin()
    }
}
like image 681
sofnomic cr Avatar asked Oct 22 '25 05:10

sofnomic cr


1 Answers

You should either have a context parameter for your ViewModel

class LoginViewModel(
    private val context: Context,
    private val _global: GlobalServices = GlobalServices(),
    private val _login:LoginModel= LoginModel(),
    private val _loginService: LoginService =LoginService(),
    private val retrofitService: IRetrofitService = RetrofitService(),
    private val storage:Storage= Storage()
):ViewModel(){

} 

or extend AndroidViewModel class and pass application.

class  LoginViewModel(application: Application) : AndroidViewModel(application){
    init{
        (application as Context)...
    }
}

AndroidViewModel vs ViewModel

like image 78
Thracian Avatar answered Oct 25 '25 04:10

Thracian



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!