繁体   English   中英

将 PagingData 流从 paging3 转换为 PagingData 的 StateFlow

[英]Transforming a flow of PagingData from paging3 into a StateFlow of PagingData

我正在使用 jetpack 库中的 paging3 学习分页。 我正在打电话给 api 以接收文章列表。 我注意到使用寻呼机在存储库中进行调用后收到的结果是包含所需结果的 PagingData 流,如下所示:

Flow<PagingData<Articles>>

当我在我的 ViewModel 中收到此流程时,我想将其转换为 Stateflow。 我试过使用stateIn运算符,但它需要一个默认值,我认为它应该是一个 StateFlow,这就是我被卡住的地方。 如何将 PagingData 流转换为 Stateflow,是否建议这样做?

我也有一个问题:为什么你拿到文章的时候要把 PagingData 的 Flow 转成 Stateflow 并在 UI 上展示呢?

在我的实践中,不需要接触 Stateflow。 如果我想获得带有分页库的文章 3. 注意Flow , ArticleRemoteMediator: RemoteMediator<Int, ArticleEntity> ...

我认为这篇文章可以帮助您归档您的目标。 (使用 Paging 3 获取文章) https://medium.com/nerd-for-tech/pagination-in-android-with-paging-3-retrofit-and-kotlin-flow-2c2454ff776e

我会说这取决于用例,而使用常规流量时,每个新订阅者都会触发新的流量发射,这可能会导致配置更改时的资源浪费(不必要的网络请求),例如屏幕配额,如果您希望这样的行为是可以的如果不考虑使用 StateFlow,请使用常规。 您可以使用stateIn扩展将常规流量排放转换为 StateFlow,并将初始 state 设置为空,如下所示。

someFlow.stateIn(coroutineScope, SharingStarted.WhileSubscribed(), PagingData.empty())

根据文档PagingData.empty()立即显示一个空的项目列表,并将任何负载 state 更新分派给演示者

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM