Desenvolvido para fins de estudo e portfólio.
O projeto foi desenvolvido com Flutter, e inclui packages como dio, lottie, shared_preferences, flutter_mobx, get_it, cached_network_image e mockito para testes.
A ideia de desenvolver um aplicativo baseado na API do site The Movies DB surgiu quando acompanhava os estudos de arquitetura Flutter no canal do YouTube do Deivid Willyan, com a playlist Curso Arquitetura no Flutter - 2022. No curso foi iniciado uma integração simples, que mostrava uma lista de filmes vindo da API e recuperava informações desses filmes. Posteriormente ampliei o projeto para contemplar mais funcionalidades e integrações. As funcionalidades por mim implementadas foram:
- Login com e-mail e senha (criar e armazenar sessão).
- Logout (deletar sessão).
- Favoritar filmes em uma conta logada.
- Navegar entre 10 listas de filmes fornecidas pela API.
Veja o vídeo exemplo a seguir: video from YouTube
Em sua arquitetura, foi implementado o Clean Dart proposto pela Flutterando como implementação da Clean Architecture no Flutter. Esse modelo pode ser dividido do seguinte modo:
- Presentation (UI, Flutter, Controllers, State Manager, etc).
- Domain (apenas regras de negócios).
- Entities: regras de negócio da empresa.
- Usecases: regras de negócio da aplicação.
- Interfaces/contratos de Repositories.
- Data
- Implementação de Repositories.
- Tratamento dos dados externos.
- Interfaces/contratos de DataSources.
- External
- Implementação de DataSources.
- Acessos externos que dependem de packages, drivers, APIs, etc.
Além disso, o Clean Architecture propõe o conjunto de princípios conhecido como SOLID.
Para gestão de estado foi adotado o Mobx do package flutter_mobx. A escolha se deu devido à sua simplicidade e agilidade na implementação, além da sua crescente popularidade na comunidade Flutter.
A injeção de dependências foi implementada com o package get_it. Escolhido por ser um package simples que atende bem as demandas do aplicativo, contribuindo na implementação do princípio SOLID da inversão de dependências.