https://kotlinlang.org logo
Title
a

althaf

08/21/2022, 4:28 AM
hi , It ok to do this in a single launch ? or do we have to use separate launch for repeat on life cylce ?
lifecycleScope.launch {

    lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
        loginAuthorizationViewModel.onLoginSuccessful.collect {
            startActivity(HomeActivity.getDefaultIntent(this@LoginActivity))
            finish()
        }
    }

    lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
        loginInputValidationViewModel.onPasswordInvalid.collect {
            enableViews(true)
            et_password.error = it
        }
    }

    lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
        loginAuthorizationViewModel.onLoginFailure.collect {
            enableViews(true)
            showMessage(it.toString())
        }
    }

    lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
        loginInputValidationViewModel.onUserNameInvalid.collect {
            enableViews(true)
            tv_user_name.error = it
        }
    }

    lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
        loginInputValidationViewModel.onValidationSuccessful.collect {
            loginAuthorizationViewModel.requestLogin(
                userName = it.first,
                password = it.second
            )
        }
    }
s

Stylianos Gakis

09/01/2022, 9:25 AM
repeatOnLifecycle
is a suspending function, meaning that in this code snippet, the first
loginAuthorizationViewModel.onLoginSuccessful.collect
will run and nothing else.
I’d personally wrap each individual
repeatOnLifecycle
call with a
lifecycleScope.launch