I have some problem with my live data. when I want to set value in my live data in race condition some value not observe in my fragement. here is my detail code:
Here Is My View Model
class AuthNewViewModel(
private val coroutineDispatcher: CoroutineDispatcher,
private val authUseCase: AuthUseCase
): ViewModel() {
private val _sendCode = MutableLiveData<DataResult<SendCode?>>()
val sendCode: LiveData<DataResult<SendCode?>> = _sendCode
fun sendCode(req:CodeReq) {
viewModelScope.launch(coroutineDispatcher) {
_sendCode.postValue(DataResult.Loading(true))
authUseCase.sendCode(req)
.flowOn(Dispatchers.IO)
.catch { error ->
_sendCode.postValue(error.isError())
}
.onCompletion {
_sendCode.postValue(DataResult.Loading(false))
}
.collect { data ->
when (data.meta?.code ?: 0) {
in 200..299 -> {
_sendCode.postValue(DataResult.Success(data.data))
}
else -> {
_sendCode.postValue(DataResult.ErrorMeta(data.data, data.errorData))
}
}
}
}
}
}
Here is when I want to triggred my view mode
authNewVM.sendCode(
CodeReq(
phone = phoneOrEmail,
channel = channel,
type = Constants.AuthConstants.TYPE_SIGNUP
)
)
Here is when the data is observe
authNewVM.sendCode.observe(viewLifecycleOwner, Observer {
when(it){
is DataResult.Success -> {
Logs.d("result success")
}
is DataResult.Error -> {
Logs.d("result error")
}
is DataResult.Loading -> {
Logs.d("result loading ${it.isLoading}")
}
is DataResult.ErrorMeta -> {
Logs.d("result error meta")
}
}
})
And the result
result loading true
result loading false
View some time not observe state success, whereas my view model is set value on succes to..