Android 在使用流映射到实时数据的视图模型中进行空检查
Android do null checks in view model that uses flow mapped to livedata
我有一个 viewModel
从服务接收 Flow
但在调用该服务之前我需要进行基本检查,例如 email
或 password
为空return 视图出错。如何returnlivedata
返回视图?
这是我的 viewModel
代码 -
private val viewState = LoginViewState()
fun loginUser(email: String, password: String): LiveData<LoginViewState> {
if (email.isEmpty()) {
// This is not working
return liveData {
viewState.copy(loading = false, emailEmpty = true)
}
}
// This works
return loginService.performLoginAction(email, password).map {
when (it) {
...
}
}.asLiveData(Dispatchers.Default + viewModelScope.coroutineContext)
}
如您所见,我对 email
是否为空进行了基本检查,如果为空,我 return 将 livedata
返回到视图并且视图没有收到任何内容。但是,当服务 returns 是 flow
并且 viewModel
将其映射到 livedata
并且 returns 到有效的视图时。如何对我的情况进行基本检查?
好的我自己解决了-
我执行以下操作并且有效 -
if (email.isEmpty()) {
return liveData {
emit(viewState.copy(loading = false, emailEmpty = true))
}
}
我基本上缺少 emit
功能
我有一个 viewModel
从服务接收 Flow
但在调用该服务之前我需要进行基本检查,例如 email
或 password
为空return 视图出错。如何returnlivedata
返回视图?
这是我的 viewModel
代码 -
private val viewState = LoginViewState()
fun loginUser(email: String, password: String): LiveData<LoginViewState> {
if (email.isEmpty()) {
// This is not working
return liveData {
viewState.copy(loading = false, emailEmpty = true)
}
}
// This works
return loginService.performLoginAction(email, password).map {
when (it) {
...
}
}.asLiveData(Dispatchers.Default + viewModelScope.coroutineContext)
}
如您所见,我对 email
是否为空进行了基本检查,如果为空,我 return 将 livedata
返回到视图并且视图没有收到任何内容。但是,当服务 returns 是 flow
并且 viewModel
将其映射到 livedata
并且 returns 到有效的视图时。如何对我的情况进行基本检查?
好的我自己解决了-
我执行以下操作并且有效 -
if (email.isEmpty()) {
return liveData {
emit(viewState.copy(loading = false, emailEmpty = true))
}
}
我基本上缺少 emit
功能