Skip to content

AlisonMeneses/flutter-test

 
 

Repository files navigation

Projeto

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.

Conceitos de Programação e Arquitetura

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_dart para 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_system segue 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_test e mocktail, 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 logger para auxiliar na depuração e monitoramento da aplicação.
  • Persistência de Dados Local: Utilização de shared_preferences para o armazenamento simples e persistente de dados no dispositivo.

Tecnologias

As seguintes tecnologias e bibliotecas foram utilizadas neste projeto:

Dependências

  • 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 Result para tratamento de sucesso e falha em operações, promovendo um código mais robusto e legível.
  • shared_preferences: ^2.5.3
  • 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.

Dependências de Desenvolvimento

  • 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.

Emulador Utilizado para Testes

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

Como Compilar e Rodar

Para compilar e rodar esta aplicação, siga os passos abaixo:

Pré-requisitos

Certifique-se de ter o Flutter SDK instalado e configurado em sua máquina. Você pode verificar sua instalação executando:

flutter doctor

Configuração Inicial

  1. Clone o repositório:
    git clone https://github.com/AlisonMeneses/flutter-test.git
    cd flutter-test
  2. Instale as dependências:
    flutter pub get

Rodar no Android

  1. Conecte um dispositivo Android (físico ou emulador) e certifique-se de que ele seja reconhecido pelo Flutter.
    flutter devices
  2. Execute a aplicação:
    flutter run
    Isso compilará e instalará a aplicação no dispositivo Android conectado.

Rodar na Web

  1. Habilite o suporte web (se ainda não o fez):
    flutter config --enable-web
  2. Execute a aplicação para web:
    flutter run -d chrome
    Ou para um navegador específico:
    flutter run -d web-server
    Isso iniciará um servidor web local e abrirá a aplicação no seu navegador padrão.

About

Desafio para Front-end Developer na DoroTech - Flutter

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • HTML 58.0%
  • Dart 26.0%
  • C++ 5.3%
  • CSS 5.0%
  • CMake 4.4%
  • Ruby 0.6%
  • Other 0.7%