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

Pha*_*inh 12 android kotlin kotlin-stateflow kotlin-sharedflow

我有一个登录表格。我用来StateFlow发送LoginResult(调用 API 之后)从ViewModelActivity。在活动中,如果登录失败,我将显示错误对话框。
第一次运行良好,但从第二次登录失败后,错误对话框将不再显示。我测试了.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)

Pha*_*inh 4

对于这种情况,我使用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都会不同