微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 MutableSharedFlow 与标准 Flow 结合使用

如何解决将 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 举报,一经查实,本站将立刻删除。