Pha*_*inh 12 android kotlin kotlin-stateflow kotlin-sharedflow
我有一个登录表格。我用来StateFlow发送LoginResult(调用 API 之后)从ViewModel到Activity。在活动中,如果登录失败,我将显示错误对话框。
第一次运行良好,但从第二次登录失败后,错误对话框将不再显示。我测试了.value两者.emitStateFlow
private val _loginResult = MutableStateFlow(LoginResult())
val loginResult: StateFlow<LoginResult> = _loginResult
fun login(email: String, password: String) {
viewModelScope.launch {
when (val result = loginRepository.login(email, password)) {
is Result.Fail-> {
_loginResult.value = LoginResult(error = "Login failed")
// _loginResult.emit(LoginResult(error = "Login failed")) same issue
}
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于这种情况,我使用SharedFlow这样我Activity仍然能够收集新值,即使它与最后一个值相同
private val _loginResult = MutableSharedFlow<LoginResult>()
val loginResult: SharedFlow<LoginResult> = _loginResult
...
_loginResult.emit(LoginResult(error = "Login failed"))
Run Code Online (Sandbox Code Playgroud)
另一种可能的解决方案,但效果不好,是将我的电流更改data class LoginResult(...)为class LoginResult. 那么每个新的实例LoginResult都会不同
| 归档时间: |
|
| 查看次数: |
7159 次 |
| 最近记录: |