0

我不确定如何解决这个问题。我有一个存储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 的值,但我该如何正确处理呢?

4

0 回答 0