O desafio
Construa o Sales Management, uma aplicação corporativa para gestão de produtos, clientes e pedidos. O objetivo não é reproduzir uma tela específica, mas demonstrar que você consegue transformar requisitos em uma solução coesa, segura e operável.
Use a base criada ao longo dos módulos. Faça commits pequenos e mantenha a aplicação executável em cada marco.
Escopo funcional
Autenticação e usuários
- Login por e-mail e um provedor social no ambiente de laboratório.
- Logout e restauração segura de sessão.
- Perfis
admin,supervisoreseller. - Rotas e ações protegidas também no backend/regras.
Dashboard
- Receita total, quantidade de pedidos, clientes ativos e produtos cadastrados.
- Estados loading, empty, success e failure.
- Layout adaptado a telefone, tablet e desktop/web.
Produtos e clientes
- Listagem, pesquisa, criação, edição e validação.
- Imagem de produto com progresso e tratamento de falha.
- Paginação ou carregamento incremental.
- Registro de atualização para sincronização.
Pedidos
- Seleção de cliente e produtos.
- Quantidade, valor unitário e total calculado pelo domínio.
- Validação contra pedido vazio ou quantidade inválida.
- Estado de pedido e atualização de estoque em operação consistente.
Continuidade e notificações
- Cache local das consultas importantes.
- Indicação clara de dado desatualizado ou operação pendente.
- Estratégia documentada para conflito e reconexão.
- Notificação de evento de negócio sem payload sensível.
Arquitetura esperada
lib/
core/
environment/
error/
network/
observability/
features/
auth/
dashboard/
products/
customers/
orders/
main.dart
Cada feature deve separar domain, data e presentation quando a complexidade justificar. Não crie camadas vazias apenas para obedecer ao desenho; registre decisões e exceções no README.
Qualidade obrigatória
dart formateflutter analyzesem erro.- Testes unitários para regras de pedido e autorização.
- Testes de widget para login, produto e estados de erro.
- Ao menos uma jornada integrada.
- Nenhum segredo ou token em código, logs ou repositório.
- Regras de segurança testadas quando usar Firebase.
- Pipeline executando qualidade e gerando artefato.
Entregáveis
- Repositório com histórico de commits compreensível.
- README com requisitos, instalação, ambientes e decisões.
- Diagrama simples das dependências.
- Aplicação executável com dados de demonstração.
- Relatório de testes e limitações conhecidas.
- Vídeo ou sequência de imagens mostrando a jornada principal.
Critérios de avaliação
| Critério | Peso |
|---|---|
| Arquitetura e separação de responsabilidades | 20% |
| Funcionalidades e regras de negócio | 25% |
| Experiência, responsividade e acessibilidade | 15% |
| Testes e qualidade automatizada | 15% |
| Segurança e proteção de dados | 10% |
| Persistência, integração e resiliência | 10% |
| Documentação e entrega | 5% |
Roteiro de conclusão
- Defina o recorte mínimo e escreva os casos de uso.
- Construa uma fatia vertical: login, produto, pedido.
- Adicione persistência e integrações atrás de contratos.
- Cubra regras críticas com testes.
- Valide experiência em diferentes tamanhos e falhas.
- Automatize o gate de qualidade.
- Revise segurança, documentação e demonstração.
Reflexão final
Ao concluir, registre três decisões que melhoraram o sistema e uma que você mudaria. Engenharia madura não é fingir que a primeira solução foi perfeita; é conseguir explicar o contexto, o compromisso assumido e o próximo passo.
Quando o projeto estiver executável, testado e documentado, marque esta etapa. Você terá uma aplicação que conecta os fundamentos do Flutter a um processo real de engenharia de software.
Defesa técnica do projeto
Além da demonstração, prepare uma conversa de 15 minutos que responda:
- Qual regra de negócio está protegida no domínio e por qual teste?
- Qual fronteira permite trocar API, persistência ou Firebase?
- Como a interface representa carregamento, ausência, falha e operação offline?
- Qual dado sensível foi deliberadamente excluído de logs e armazenamento?
- Que falha o pipeline consegue impedir antes da entrega?
- Qual decisão você revisaria se o produto crescesse dez vezes?
Execute o gate a partir de um checkout limpo e registre versões e artefatos:
flutter --version
flutter pub get
dart format --output=none --set-exit-if-changed .
flutter analyze
flutter test --coverage
flutter build <target> --release
Não apresente apenas “todos os comandos ficaram verdes”. Explique a evidência produzida por cada etapa e qual risco ainda permanece fora dela. Consulte a referência de comandos e conceitos para revisar a toolchain antes da defesa.