Good.Hamburger.App.-.Demonstration.of.Use.mp4
Escolher o seu pedido nunca foi tão fácil e moderno como agora!
Peça já e veja os descontos especiais que preparamos para você = )
- 🎯 Objetivo
- 📐 Arquitetura
- 📁 Estrutura de Pastas
- 👨💻 Tecnologias e Ferramentas
- 💻 Como rodar
- 🎲 Mocks (Dados Simulados)
- 🚧 Limitações e Próximos Passos
- 📝 Autor
O Good Hamburger foi desenvolvido para oferecer uma experiência completa de pedidos de sanduíches e acompanhamentos. O aplicativo simula um ambiente real de produção, abrangendo desde o primeiro acesso do usuário até a finalização do pedido.
Principais Funcionalidades:
- Onboarding & Identificação: Fluxo de integração e registro simplificado.
- Navegação: Splash screen, menu interativo, carrinho de compras e histórico de pedidos.
Destaques Técnicos: O projeto foi construído com foco em escalabilidade e qualidade de código, utilizando arquitetura limpa. A estrutura segue as melhores práticas do mercado atual, incluindo a implementação de testes automatizados e um design de software moderno.
Para a arquitetura do projeto, foi utilizado o padrão MVVM (Model-View-ViewModel) conforme recomendação da documentação oficial do Flutter, ilustrado abaixo:
A organização das pastas segue a separação por funcionalidades:
assets/ # Arquivos estáticos
├── images/
└── mocks/ # Mocks da API (JSON) e dados para testes
docs/ # Documentos base para início do desenvolvimento
├── architecture/
└── designs/
lib/
├── core/ # Configurações globais e infraestrutura
│ ├── config/
│ ├── di/
│ ├── router/
│ └── ui/
│
├── features/ # Recursos/funcionalidades específicas
│ ├── cart/
│ ├── main/ # Responsável pela navegação principal
│ ├── menu/
│ ├── onboarding/
│ ├── orders/
│ ├── splash/
│ └── user/
│
├── shared/ # Recursos compartilhados/reutilizados em várias features
│ ├── domain/
│ ├── models/
│ ├── services/
│ ├── utils/
│ └── view_models/
│
└── main.dart # Ponto de início do aplicativo
test/ # Testes automatizados
└── unit/
-
Core
- Framework:
Flutter - Linguagem de programação:
Dart
- Framework:
-
Ferramentas de Desenvolvimento
- IDE:
Android Studio - Versionamento:
Git&GitHub - Qualidade de Código (Linter):
flutter_lints
- IDE:
-
Arquitetura & Gerenciamento
- Gerenciamento de Estado:
Provider - Gerenciamento de Injeção de Dependência:
GetIt
- Gerenciamento de Estado:
-
Persistência de Dados
- Armazenamento Local:
shared_preferences - Acesso ao Sistema de Arquivos:
path_provider
- Armazenamento Local:
-
Interface de Usuário (UI/UX)
- Carrossel / Indicadores:
smooth_page_indicator - Notificações In-App:
top_snackbar_flutter - Ícones:
cupertino_icons
- Carrossel / Indicadores:
-
Utilitários
- Formatação (Moedas/Datas):
intl
- Formatação (Moedas/Datas):
- Dispositivo conectado à internet;
- Flutter SDK instalado e configurado;
- Android Studio (ou VS Code) configurado.
- Siga as orientações de instalação do Flutter;
- Clone o repositório para a sua máquina ou realize o download do zip;
- No terminal, na raiz do projeto, execute:
flutter pub getPara rodar o aplicativo, execute:
flutter runExecute o seguinte comando para rodar os testes (cobertura de cenários de desconto):
flutter test test/unit/order_calculator_test.dartDurante o desenvolvimento, foram utilizados arquivos mocks (localizados em assets/mocks) para simular a comunicação com uma API.
Clique para ver o JSON de MENU
[
{
"id": 1,
"category": "sandwich",
"name": "Burger",
"description": "A classic, juicy beef burger served on a fresh bun.",
"price": 500,
"imagePath": "assets/mocks/images/menu/item_1.jpg"
},
{
"id": 2,
"category": "sandwich",
"name": "Egg",
"description": "A hearty sandwich featuring fresh eggs and tasty toppings.",
"price": 450,
"imagePath": "assets/mocks/images/menu/item_2.jpg"
},
{
"id": 3,
"category": "sandwich",
"name": "Bacon",
"description": "A savory sandwich piled high with crispy bacon and cheese.",
"price": 700,
"imagePath": "assets/mocks/images/menu/item_3.jpg"
},
{
"id": 4,
"category": "fries",
"name": "Fries",
"description": "Crispy golden french fries, perfect as a side.",
"price": 200,
"imagePath": "assets/mocks/images/menu/item_4.jpg"
},
{
"id": 5,
"category": "drink",
"name": "Soft Drink",
"description": "A refreshing, ice-cold soft drink to complete your meal.",
"price": 250,
"imagePath": "assets/mocks/images/menu/item_5.jpg"
}
]Clique para ver o JSON de PEDIDOS
[
{
"id": 1,
"code": "2345",
"date": "2025-11-21T23:33:40.123Z",
"items": [
{
"id": 1,
"category": "sandwich",
"name": "Burger",
"description": "A classic, juicy beef burger served on a fresh bun.",
"price": 500,
"imagePath": "assets/mocks/images/menu/item_1.jpg"
}
],
"subtotal": 500,
"discount": 0,
"total": 500,
"status": "preparing",
"orderedBy": {
"name": "Luís"
}
},
{
"id": 2,
"code": "2346",
"date": "2025-11-21T23:33:40.123Z",
"items": [
{
"id": 1,
"category": "sandwich",
"name": "Burger",
"description": "A classic, juicy beef burger served on a fresh bun.",
"price": 500,
"imagePath": "assets/mocks/images/menu/item_1.jpg"
},
{
"id": 4,
"category": "fries",
"name": "Fries",
"description": "Crispy golden french fries, perfect as a side.",
"price": 200,
"imagePath": "assets/mocks/images/menu/item_4.jpg"
}
],
"subtotal": 700,
"discount": 70,
"total": 630,
"status": "delivered",
"orderedBy": {
"name": "Perna"
}
}
]- Rotas tipadas: migrar para um roteador com tipagem (ex:
GoRouter) para segurança na injeção de argumentos. - API real: trocar
ApiServicesimulado por umahttppara integração com backend e ajustas camadas adaptadas durante a simulação. - Testes de Integração: adicionar testes end-to-end para fluxo do carrinho (adicionar item → verificar total → enviar pedido).
Luís Henrique Perna |
|---|
