Aplicativo desenvolvido em Flutter para gerenciamento de clientes, produtos e pedidos, com controle de estoque e upload de imagens.
O sistema é multiplataforma e funciona em:
- 📱 Mobile (Android)
- 🌐 Web
- 💻 Desktop (Windows)
Utiliza Riverpod para gerenciamento de estado e diferentes bancos de dados dependendo da plataforma.
Principais tecnologias do projeto:
- Flutter
- Dart
- Riverpod
- SQLite (sqflite)
- Hive
- Image Picker
- Intl
- UUID
O aplicativo utiliza bancos diferentes dependendo da plataforma.
| Plataforma | Banco utilizado |
|---|---|
| Android | SQLite (sqflite) |
| Windows | SQLite (sqflite_common_ffi) |
| Web | Hive |
Utiliza SQLite através de:
sqflite
sqflite_common_ffi
Vantagens:
- banco relacional
- persistência local
- consultas SQL
- bom desempenho
Utiliza Hive.
Hive é um banco:
- NoSQL
- muito rápido
- compatível com navegador
- funciona com IndexedDB
O sistema se conecta à API pública ViaCEP para automatizar o cadastro de endereços.
-
Endpoint Base: https://viacep.com.br/ws/
-
Implementação: Localizada em services/api_service.dart.
-
Fluxo:
- Usuário digita o CEP no formulário de cliente.
- Sistema valida o formato do CEP.
- Requisição GET é enviada para a API.
- Dados recebidos (Logradouro, Bairro, Cidade) preenchem automaticamente os campos do formulário.
- Tratamento de erros exibe mensagens amigáveis (Snackbars) em caso de falha ou CEP inexistente.
Permite cadastrar e gerenciar clientes.
- Criar cliente
- Editar cliente
- Excluir cliente
- Listar clientes
- ID
- Razão Social
- CNPJ
- Endereço
- CEP
- Logradouro
Permite cadastrar produtos que poderão ser vendidos em pedidos.
- Criar produto
- Editar produto
- Excluir produto
- Listar produtos
- Upload de imagens
- ID
- Descrição
- Valor de venda
- Quantidade em estoque
- Imagens
Os produtos podem possuir uma ou mais imagens.
Ele detecta automaticamente:
| Tipo | Widget usado |
|---|---|
| Web | Image.network |
| Mobile/Desktop | Image.file |
| URL | Image.network |
Caso a imagem não exista:
Icon(Icons.broken_image)
O sistema permite criar pedidos vinculados a clientes.
- Selecionar cliente
- Escolher produtos
- Definir quantidade
- Adicionar ao carrinho
- Finalizar pedido
Durante a criação do pedido, os produtos são adicionados a um carrinho temporário.
subtotal = quantidade × valor do produto
total do pedido = soma dos subtotais
Os valores são formatados com:
intl
Ao finalizar um pedido, o sistema automaticamente:
- registra o pedido
- diminui o estoque dos produtos vendidos
- atualiza a lista de produtos
Para garantir a qualidade da aplicação foram implementados:
-
Validação de formulários Campos obrigatórios e validação de formato (ex: e-mail)
-
Feedback visual (Loading) Uso de CircularProgressIndicator durante buscas e operações
-
Tratamento de erros Captura de exceções com try/catch e exibição de SnackBar
-
Confirmação de ações Diálogos antes de excluir produtos ou pedidos
O aplicativo utiliza Riverpod.
Providers principais:
clientProviderproductProviderorderProvider
Eles são responsáveis por:
- carregar dados
- atualizar a interface
- interagir com os repositórios
lib/
core
├ database_helper.dart
models
├ client.dart
├ product.dart
└ order.dart
providers
├ client_provider.dart
├ client_repository_provider.dart
├ order_provider.dart
├ order_repository_provider.dart
├ product_provider.dart
└ producto_repository_provider.dart
repositories
├ client
├ client_repository.dart
├ hive_client_repository.dart
└ sqlite_client_repository.dart
├ order
├ hive_order_repository.dart
├ order_repository.dart
└ sqlite_order_repository.dart
└ product
├ hive_product_repository.dart
├ product_repository.dart
└ sqlite_product_repository.dart
services
├ api_service.dart
ui
├ pages
├ clients
├ client_form_page.dart
└ client_list_page.dart
├ orders
├ new_order_page.dart
└ order_list_page.dart
└ products
├ product_from_page.dart
└ product_list_page.dart
├ widgets
└ image_display_widget.dart
├ HomeScreen.dart
└ main.dart
- Clone o repositório
- Entre na pasta do projeto
- Instale as dependências: flutter pub get
- Execute o projeto
-
Mobile: flutter run
-
Web: flutter run -d chrome
-
Desktop (Windows): flutter run -d windows
- Flutter multiplataforma
- Riverpod
- Arquitetura em camadas
- Persistência local