我正在开发一个具有简洁架构原则的应用。我有一个 domain
模块,它是一个 Java/Kotlin
模块,它没有 android 依赖项和一个 domainImpl
模块,它是一个 >Android
模块并依赖于 local
、remote
和 domain
模块。这是 domain
模块中的 Repository
示例:
interface MovieRepository {
fun getMovie(id: Long): Flow<Movie>
}
下面的代码是它在 domainImpl
模块中的实现:
class MovieRepositoryImpl(
private val movieApi: MovieApi
) : MovieRepository {
override fun getMovie(id: Long): Flow<Movie> = flow {
emit(movieApi.getMovie(id))
}
}
在这种情况下一切正常。但现在我正在尝试为我的分页添加 Android Paging 3
。所以我必须向 MovieRepository
接口(interface)添加一个方法,例如:
fun getMovies(): Flow<PagingData<Movie>>
但在此之前,我必须将 Paging 库添加到我的 domain
模块中,但不幸的是它是一个 Android
库,我找不到它的核心依赖项。那么我能做些什么呢?因此,我是否必须将我的 domain
模块更改为 android 模块?还是有其他解决方法?
最佳答案
Paging 的非android 组件在androidx.paging:paging-common
- 根据定义,对演示者 API 的任何依赖都是特定于 Android 的,因此任何与 RecyclerView
相关的代码, LazyColumn
等需要特定于 Android。
但是 PagingSource
, PagingData
, Pager
, RemoteMediator
均由paging-common
提供,因此您对这些类的实现,包括您的转换链和 Flow<PagingData>
的总体输出可以完全没有安卓系统。
关于android - java/kotlin 模块中的 Jetpack Paging 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66262187/