Este projeto Flutter foi desenvolvido como parte de um teste para uma vaga na empresa DoroTech. Ele foi executado utilizando o SDK do Flutter, seguindo as melhores práticas de desenvolvimento para aplicações multiplataforma e aplicando conceitos como SOLID para organização do código, MVVM (Model-View-ViewModel) para separação de responsabilidades e Atomic Design para estruturação da interface de usuário.
Este projeto foi desenvolvido aplicando diversos conceitos e padrões de programação e arquitetura, visando a criação de um código limpo, testável, escalável e de fácil manutenção:
- Programação Orientada a Objetos (POO): Utilização de classes, objetos, herança, polimorfismo e encapsulamento, pilares do desenvolvimento em Dart e Flutter.
- Injeção de Dependências: Implementada através da biblioteca
get_it, facilitando a inversão de controle e a testabilidade das classes. - Tratamento de Erros Funcional: Adoção da biblioteca
result_dartpara um tratamento explícito e robusto de resultados de operações (sucesso/falha), promovendo um fluxo de controle mais claro. - Arquitetura em Camadas / Clean Architecture (ou similar): A estrutura de diretórios (
config,data,design_system,domain,routing,shared,ui) reflete uma clara separação de responsabilidades, isolando a lógica de negócio da interface do usuário e da infraestrutura. - SOLID Principles: Os princípios SOLID (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) foram aplicados para garantir um design de software flexível e manutenível.
- MVVM (Model-View-ViewModel): Padrão de arquitetura utilizado para separar a lógica de negócio da interface do usuário, promovendo a testabilidade e a reutilização de código.
- Atomic Design: A organização dos componentes de UI na pasta
design_systemsegue os princípios do Atomic Design, permitindo a construção de interfaces a partir de elementos menores e reutilizáveis (átomos, moléculas, organismos, templates e páginas). - Testes Unitários: Com o uso de
flutter_testemocktail, o projeto incorpora testes automatizados para garantir a qualidade e o comportamento esperado das funcionalidades. - Navegação Declarativa: Gerenciamento de rotas e navegação na aplicação de forma declarativa, utilizando a biblioteca
go_router. - Consumo de API / Requisições HTTP: A biblioteca
dioé utilizada para realizar requisições de rede, facilitando a comunicação com serviços externos. - Logging: Implementação de um sistema de logging com a biblioteca
loggerpara auxiliar na depuração e monitoramento da aplicação. - Persistência de Dados Local: Utilização de
shared_preferencespara o armazenamento simples e persistente de dados no dispositivo.
As seguintes tecnologias e bibliotecas foram utilizadas neste projeto:
- Flutter SDK:
3.8.0- Documentação Oficial do Flutter
- Motivo: Framework principal para o desenvolvimento da aplicação multiplataforma.
- Dart SDK: Versão compatível com Flutter
3.8.0- Documentação Oficial do Dart
- Motivo: Linguagem de programação utilizada pelo Flutter.
get_it:^8.0.3- Pacote get_it
- Motivo: Utilizado para injeção de dependências, facilitando a organização e testabilidade do código.
go_router:^14.8.1- Pacote go_router
- Motivo: Gerenciamento de rotas e navegação declarativa na aplicação.
result_dart:^2.0.0- Pacote result_dart
- Motivo: Implementa o padrão
Resultpara tratamento de sucesso e falha em operações, promovendo um código mais robusto e legível.
shared_preferences:^2.5.3- Pacote shared_preferences
- Motivo: Permite o armazenamento simples de dados persistentes no dispositivo.
dio:^5.6.0- Pacote dio
- Motivo: Cliente HTTP poderoso para fazer requisições de rede.
logger:^2.6.0- Pacote logger
- Motivo: Biblioteca para logging de mensagens no console, útil para depuração.
flutter_lints:^5.0.0- Pacote flutter_lints
- Motivo: Conjunto de regras de lint recomendadas para encorajar boas práticas de codificação.
mocktail:^1.0.3- Pacote mocktail
- Motivo: Biblioteca para criação de mocks em testes unitários e de integração.
Para os testes e desenvolvimento desta aplicação, foi utilizado o seguinte emulador Android:
- Modelo do Dispositivo: Pixel 6 Pro
- Resolução da Tela: 1440 x 3120 pixels
- Densidade da Tela (DPI): 560 dpi (xxxhdpi)
- Versão do Android: Android 14 (API Level 34)
- Tamanho da Tela: 6.7 polegadas
Para compilar e rodar esta aplicação, siga os passos abaixo:
Certifique-se de ter o Flutter SDK instalado e configurado em sua máquina. Você pode verificar sua instalação executando:
flutter doctor- Clone o repositório:
git clone https://github.com/AlisonMeneses/flutter-test.git cd flutter-test - Instale as dependências:
flutter pub get
- Conecte um dispositivo Android (físico ou emulador) e certifique-se de que ele seja reconhecido pelo Flutter.
flutter devices
- Execute a aplicação:
Isso compilará e instalará a aplicação no dispositivo Android conectado.
flutter run
- Habilite o suporte web (se ainda não o fez):
flutter config --enable-web
- Execute a aplicação para web:
Ou para um navegador específico:
flutter run -d chrome
Isso iniciará um servidor web local e abrirá a aplicação no seu navegador padrão.flutter run -d web-server