我不确定如何解决这个问题。我有一个存储combine
流的变量。我必须结合 MutableSharedFlow 和 Flow。这是我使用的代码
val users = combine(
reloadUsers,
nicknameQuery.asFlow()
) { reloadUsers, nicknameQuery->
Pair(reloadUsers, nicknameQuery)
}.flatMapLatest { (reloadUsers, nicknameQuery) ->
Log.d(TAG, "Querying users")
repository.users(0,
nicknameQuery,
reloadUsers == Refresh.FORCE,
onFetchError = {
viewModelScope.launch {
_userListShared.emit(UserListStateEvent.ErrorState(it))
}
}
)
}.stateIn(viewModelScope, SharingStarted.Lazily, null).asLiveData()
这里是 reloadUsers 的定义
private val reloadUsers = MutableSharedFlow<Refresh>()
这是nicknameQuery的定义
private val nicknameQuery = MutableStateFlow<String>("")
我使用 nickbnameQuery 在昵称中运行查询并使用 reloadUsers 强制从网络获取。
在视图模型中,我使用此代码更新 reloadUsers
viewModelScope.launch {
reloadUsers.emit(Refresh.FORCE)
}
我的问题是当我在 reloadUsers 上运行 Refresh.FORCE 后更改nicknameQuery 的值时。因为每次我更改nicknameQuery 时,都会执行combine,但是在reloadUsers 中我再次FORCE。我想将 MutableSharedFlow 用作“触发器”,因此只有在我想强制它时才会强制重新加载。我应该重置 SharedFlow 的值,但我该如何正确处理呢?