Criando listas paginadas com Jetpack Compose

João Gabriel
Android Dev BR
Published in
2 min readJan 23, 2021

--

Olá a todos 😄, anteriormente publiquei um artigo demonstrando como utilizar o paging v3.

Ainda não existia suporte oficial para paginação no Jetpack Compose, mas a partir da versãocompose1.0.0-alpha06, a biblioteca paging-compose foi incluída.

Utilizei a mesma estrutura(PagingSource, Pager) do projeto anterior, sendo assim só mudarei a camada de apresentação de Fragment + ViewModel para Composables + ViewModel.

Todas as bibliotecas utilizadas(compose, paging), estão em alpha e não é aconselhável o uso em produção, e até o lançamento, o modo de implementação das mesmas pode mudar, este artigo foi feito em caráter de curiosidade/estudos.

Configurando o projeto

É necessário adicionar a dependência da biblioteca de paginação no build.gradle do nível de aplicação, em um projeto que já tenha o Jetpack Compose habilitado.

Implementação da obtenção dos dados

A explicação de cada uma das classes está no artigo anterior.

Utilizei a https://rickandmortyapi.com/ como fonte de dados.

PersonageDataSource

PersonageRepository

PersonageViewModel

Implementação camada de UI

  • No Jetpack Compose, LazyColumn e LazyRow como um substituto para RecyclerView para exibir uma lista de dados.
  • A biblioteca paging-compose vem com funções de extensão no LazyListScope que será usado pelos composables LazyColumn e LazyRow para exibir PagingData em uma lista.
  • É necessário converter o Flow<PagingData<CharacterUi>> em LazyPagingItems<CharacterUi>, que é uma extension function que transforma o fluxo de dados de paginação em itens de carregamento sob demanda.
  • nossa lista lazyCharacters então pode ser passada para a função items(), ela é uma extension function que retorna cada item da lista passada para que assim possamos atribuir a nossa view(CharacterItem) que representa um item único, e sua implementação é a seguinte:
Demonstração da paginação

Considerações Finais

Essa nova maneira de fazer paginação me deixou bastante ansioso para poder utilizar, ainda mais com a substituição do RecyclerView e todo seu boilerplate(Adapter, ViewHolders) por LazyColumn e LazyRow, e também a substituição dos callbacks de scroll, pelo compose-paging.

O projeto usado no meus estudos está no meu Github.

Obrigado por ler até aqui, fiquem bem 🙏

--

--