val animeHistory: Flow<PagingData<Anime>> = useCases
.getAnimeHistory()
.cachedIn(viewModelScope)
val animeWatchList: Flow<PagingData<Anime>> = useCases
.getAnimeWatchList()
.cachedIn(viewModelScope)
所以,我有 2 个这样的流程,并希望通过使用数据类将其公开给 UI 并使用单个流程。
data class CollectionState(
val history: Flow<PagingData<Anime>> = flowOf(),
val watchList: Flow<PagingData<Anime>> = flowOf(),
)
但这里的问题是,我无法组合 2 个流并同时将其保留为流。如果我使用
combine
,它会将两个流转换为 PagingData,并且我无法在 UI 中使用它来进行撰写。有办法实现这一点吗?或者替代方案?
我不确定我是否理解您真正想要实现的目标,但是查看代码,您希望将两个流合并为一个流,同时还将它们的内容转换为一个
CollectionState
,然后将其包装到其中,这似乎是合理的单一流。您需要首先将数据类更改为:
data class CollectionState(
val history: PagingData<Anime>,
val watchList: PagingData<Anime>,
)
毕竟,拥有一系列的流程对于 compose 来说没有任何意义。
然后创建您想要公开给 compose 的最终 ui 状态将像这样简单:
val uiState: Flow<CollectionState> = combine(animeHistory, animeWatchList) { history, watchList ->
CollectionState(
history = history,
watchList = watchList,
)
}
您可能应该通过调用
StateFlow
将其变为 stateIn
。
您现在拥有 one 流,其中包含其他两个流的内容作为
CollectionState
,只要其中任何一个流产生新值,该流就会更新。