0

I have an API (https://www.thecocktaildb.com/api.php) I want to load all lists one by one. There's a request where I can find all categories and the only difference beetween lists in the filter in URL.request function What should i use to achieve such functionality? The sketch of how it should be. Maybe Paging library can be useful? Please help!

nvrmndth
  • 39
  • 5

1 Answers1

0

I believe that you can use Paging 3 for that. I'll assume that you will start this by having all the categories in a list.

class DrinkSource(
    private val categories: List<String>
) : PagingSource<String, Drink>() {
    override suspend fun load(
        params: LoadParams<String>
    ): LoadResult<String, Drink> {
        val result = requestFromAPI(params.key ?: categories[0])
        val index = categories.indexOf(params.key)
        val previous = if (index == 0) null else categories[index - 1]
        val next = if (index == categories.size - 1) null else categories[index + 1]
        return LoadResult.Page(result, prevKey = previous, nextKey = next)
    }
    
    private suspend fun requestFromAPI(category: String): List<Drink> {
        // replace this with an API call
        return listOf(Drink(1, ""))
    }
}

From what i saw of your API there were no pagination in the category query, so this solution would work.

João Paulo Sena
  • 665
  • 4
  • 11