Skip to content

Este projeto utiliza Kotlin, ViewBinding, Clean Architecture, MVVM, Modularização, Coroutines, Livedata, Koin, Room, Retrofit, CI, entre outros. (Testes em andamento)

Notifications You must be signed in to change notification settings

jsouza678/Pokedex

Repository files navigation

Pokedex

O aplicativo é, como seu nome diz, uma pokedex, que permite consultar todos os pokemons existentes!

Ao abrir o aplicativo o usuário deve escolher entre realizar uma pesquisa por nome do pokemon em um search dialog, ou descobrir os pokemons na lista.

A pesquisa ocorre no cache do aplicativo, então é necessário que o usuário descubra os pokemons primeiro!

A tela principal da aplicação disponibiliza uma lista com todos os pokemons, onde seu carregamento é feito por endless scroll. Ao clicar em algum pokemon, a tela de detalhes é aberta, e disponibiliza várias abas com About, Stats, Evolution Chain e Others (Types e Abilities), além de um carousel com imagens do pokemon (basta deslizar para o lado para mudar de imagem).

Ao clicar em alguma descrição, rapidamente aparecerá sua descrição. Ao clicar em um tipo, aparecerá uma lista com todos os pokemons do mesmo tipo. Ao clicar na descrição do pokemon, se abrirá uma janela com a sua descrição completa.

Algumas screenshots

first_screen_light first_screen_dark catalog_screen_light catalog_screen_dark details_light details_dark

Ambiente de instalação

  • 1: Instale o Android Studio;
  • 2: Abra a aplicação;
  • 3: Sincronize o projeto;
  • 4: Rode o aplicativo em um simulador ou em um device externo.

API

A API utilizada é a POKE.API V2.

(https://pokeapi.co/)

API de Imagens

A API de imagens é a Pokeres!

(https://pokeres.bastionbot.org/)

Automação

Ktlint - a task valida se o padrão do código está de acordo com o lint. O ./gradlew ktlint realiza a verificação de todos os componentes do projeto, e retorna o resultado.

KtlintFormat - esta tarefa modifica o código para que ele siga o padrão do lint. O ./gradlew ktlintFormat roda uma rotina que formata o código de acordo com o máximo que o lint pode fazer de modificações para que o código esteja no seu padrão.

Arquitetura

A aplicação busca o desacoplamento e a escalabilidade em sua arquitetura, fazendo uso do Clean Architecture e do MVVM com Modularização.

Principais dependências

Coroutines - lidando com threads e assincronismo

Abordagem sugerida pela Google e com um bom funcionamento com o Live Data, faz bom uso das threads e da Thread Pool do dispositivo, melhorando a performance da aplicação.

Room - persistência de dados

Camada de abstração sobre o SQLite, o Room é um facilitador para persistir dados no banco do aparelho. É importante ressaltar que a utilização do Room e Coroutines necessita de uma forma de verificar as queries do banco de dados, já que elas devem ser feitas de forma async. O LiveData foi utilizado neste caso para tornar as consultas reativas, e permitirem a execução fora da main thread. (Dispatchers.Main, e sem o problemático .allowMainThreadQueries).

Retrofit - requisições HTTP

Retrofit é a biblioteca mais difundida por encapsular e lidar com requisições HTTP, além de possuir uma fácil implementação.

Material Design - layout intuitivo e clean

O aplicativo segue os padrões do MaterialDesign para uma melhor experiência do usuário em sua utilização.

Koin injeção de dependência

Escolhida por sua simples implementação comparada ao Dagger (E recentemente com o Koin 2.0, o desempenho não é muito diferente).

O que eu gostaria de ter feito

  • criado testes de ui;

  • implementado animações e transições entre as telas da aplicação;

About

Este projeto utiliza Kotlin, ViewBinding, Clean Architecture, MVVM, Modularização, Coroutines, Livedata, Koin, Room, Retrofit, CI, entre outros. (Testes em andamento)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages