/car_store

Car showcase containing listing with pagination, user authentication and admin mode to manage vehicle database

Primary LanguageDart

Car Store App

O Car Store é um aplicativo Flutter para listar e gerenciar veículos em uma loja.

Funcionalidades

  • Login e cadastro de usuários
  • Listagem de veículos
  • Detalhes do veículo
  • Adição de novo veículo
  • Edição de veículo existente
  • Exclusão de veículo

Capturas de Tela



Algumas Tecnologias Utilizadas

  • Flutter
  • Dart
  • flutter_bloc
  • Dio
  • Go router

Técnicas

  • Arquitetura:
    • O projeto segue Clean Architecture (baseado na proposta da Resocoder) que enfatiza a separação de responsabilidades em camadas.
    • Adota também o padrão de organização Feature First, que prioriza a estruturação do projeto em torno das funcionalidades, facilitando a manutenção e melhorando a organização.
  • Testes unitários:
    • Os testes seguem o pattern Arrange, Act, Assert
    • Para mocks foi utilizado Mockito
    • OBS: devido ao tempo foi implementado o teste apenas do caso de uso de login
  • Autenticação com JWT
  • Caching com Decorator Pattern para listagem das imagens
  • Princípios SOLID
  • Injeção de Dependência
  • Service Locator
  • Factory Methods
  • Singleton
  • State Management

Como Executar

O projeto requer que a Car Store Api esteja executando na sua rede. Siga os passos para executar a api em https://github.com/Gabriel-S-Souza/car_store_api.

A versão do Flutter utilizada no projeto foi a 3.13.5. Clone este repositório para o seu ambiente de desenvolvimento:

git clone https://github.com/Gabriel-S-Souza/car_store.git

Abra o projeto em um editor de código e baixe as dependências:

flutter pub get

Selecione um dispositivo/emulador ou selecione o chrome para a versão web. E então execute o app passando a seguinte flag.

flutter run --dart-define-from-file=env.json

Alternativamente, você pode executar com fn+F5.

OBS: Caso necessário, substitua o argumento "API_URL" do arquivo env.json com o ip correto em que a api está executando na sua rede.