Предполагается, что один экземпляр PagingSource представляет моментальный снимок резервного набора данных, что в основном означает, что если страница отбрасывается и перезагружается одним и тем же экземпляром, должна быть выведена та же самая страница.
Однако, вы можете иметь одну реализацию и создавать несколько ее экземпляров, поэтому, вероятно, будет рекомендовано что-то вроде этого:
class AnimalPagingSource(val species: String?): PagingSource<..> {
override suspend fun load(...): LoadResult<..> {
val result = if (species != null) {
return networkApi.getSpecies(species)
} else {
return networkApi.getAnimals()
}
return LoadResult.Page(result.data, ...)
}
}
Позже, когда вам понадобится использовать Flow > Таким образом, вы можете переключаться между несколькими пейджерами:
speciesFlow
.flatMapLatest { species ->
Pager(...) { AnimalPagingSource(species) }.flow
}
.cachedIn(scope)
.collectLatest { pagingData ->
adapter.submitData(pagingData)
}