gpt4 book ai didi

android - 当新值与上一个值相同时,StateFlow 不会发出

转载 作者:行者123 更新时间:2023-12-04 13:30:00 25 4
gpt4 key购买 nike

我有一个登录表单。我用 StateFlow发送LoginResult (调用 API 后)来自 ViewModelActivity .在 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
}
...
}
}
}

最佳答案

对于这种情况,我使用 SharedFlow所以我的Activity即使它与最后一个值相同,仍然能够收集新值

private val _loginResult = MutableSharedFlow<LoginResult>()
val loginResult: SharedFlow<LoginResult> = _loginResult

...
_loginResult.emit(LoginResult(error = "Login failed"))
另一种可能的解决方案,但不是很好,是更改我当前的 data class LoginResult(...)class LoginResult .然后 LoginResult 的每个新实例会不一样

关于android - 当新值与上一个值相同时,StateFlow 不会发出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65592423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com