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