将 MutableSharedFlow 与标准 Flow 结合使用

问题描述

我不确定如何解决这个问题。 我有一个存储 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 的值。因为每次我更改昵称查询时,都会执行组合,但在 reloadUsers 中我再次强制。我想将 MutableSharedFlow 用作“触发器”,因此它仅在我想强制重新加载时才强制重新加载。我应该重置 SharedFlow 的值,但我该如何正确处理?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)