Aplicativo Flutter para receber, em tempo real, pessoas identificadas pelo sistema de segurança de uma loja e emitir um alerta prioritário quando uma pessoa classificada como de alto risco é detectada.
Estado atual: cliente funcional do contrato API v1. A autenticação e as fotos usam HTTP/HTTPS; somente novas detecções chegam por WebSocket. Um modo simulado continua disponível para desenvolvimento sem servidor.
O desafio central é transformar eventos de detecção em ações visíveis e rápidas para a equipe da loja. O app separa autenticação, dados e alertas em módulos, mantém a sessão e a lista de eventos em estados próprios e coloca detecções críticas em uma fila para confirmação individual.
Para explorar o fluxo sem o servidor, use o modo de demonstração. Para avaliar as decisões técnicas, consulte a arquitetura, o contrato da API e os testes automatizados.
- formulário de conexão com validação de IPv4, porta, usuário e senha;
- armazenamento seguro do último IP, porta e usuário (a senha nunca é salva);
- listagem apenas das detecções recebidas desde o login atual;
- filtros para pessoas conhecidas, suspeitas e novas;
- detalhes da detecção e histórico de ocorrências;
- recebimento de detecções em tempo real, com reconexão progressiva;
- fila de alertas críticos, com confirmação individual;
- vibração contínua, notificação de alta prioridade e tela de alerta;
- ação explícita para confirmar e parar a vibração na tela e na notificação;
- serviço Android em primeiro plano enquanto o monitoramento está ativo;
- encerramento do monitoramento, da notificação e da vibração ao desconectar.
- Flutter e Dart;
flutter_bloceequatablepara estado;go_routerpara navegação e proteção de rotas;formzpara validação do formulário;flutter_secure_storagepara dados locais não sensíveis da conexão;flutter_local_notifications,vibrationeflutter_foreground_taskpara alertas nativos;flutter_test,bloc_testemocktailpara testes.
As versões exatas estão em pubspec.yaml e
pubspec.lock.
- Flutter compatível com Dart
>= 3.12.2 < 4.0.0; - Android Studio/SDK para executar no Android;
- Xcode e macOS para executar no iOS;
- JDK 17 para compilar o projeto Android.
Confira a instalação com:
flutter doctorNa raiz do repositório:
flutter pub get
flutter runPara escolher um dispositivo:
flutter devices
flutter run -d <id-do-dispositivo>Informe o IPv4, a porta e as credenciais configuradas no software principal.
Para a instalação atualmente homologada, o formulário já inicia preenchido
com 192.168.1.20:8000 e o app acessa http://<ip>:<porta>/api/v1.
Quando o servidor passar a oferecer TLS, execute ou compile com:
flutter run --dart-define=API_SCHEME=httpsHTTP não criptografa credenciais nem dados durante o transporte. A rede local deve ser isolada e o servidor deve migrar para HTTPS antes do uso definitivo.
Para executar sem o software principal:
flutter run --dart-define=USE_MOCKS=trueNo modo simulado, informe qualquer IPv4 e porta válidos e use:
| Campo | Valor de exemplo |
|---|---|
| IP | 192.168.0.10 |
| Porta | 8080 |
| Usuário | guarda |
| Senha | 1234 |
Depois da conexão simulada, uma nova detecção crítica é gerada a cada 35 segundos. O alerta só termina após tocar em CONFIRMAR E PARAR VIBRAÇÃO; alertas simultâneos ficam em fila.
- O app inicializa os canais de notificação suportados pela plataforma.
- O usuário informa o endereço do sistema principal e suas credenciais.
LoginCubitvalida os campos e autentica peloConnectionRepository.SessionCubitregistra a sessão e o roteador abre/home.- O monitoramento em tempo real começa com a tela vazia.
- Uma detecção de tipo
knownThiefabre/alert, vibra e exibe uma notificação nativa. - A confirmação marca a detecção apenas no estado local e avança a fila.
- Ao desconectar, a rota volta ao login e todos os alertas são interrompidos.
lib/
├── main.dart # inicialização dos serviços e do app
├── app.dart # injeção de dependências e efeitos globais
├── core/
│ ├── storage/ # armazenamento seguro local
│ ├── theme/ # tema e cores
│ └── utils/ # validação do formulário
├── features/
│ ├── auth/ # login, sessão e conexão
│ ├── detections/ # histórico, modelos, filtros e detalhes
│ └── alert/ # fila, tela e recursos nativos de alerta
└── routing/ # rotas e redirecionamento por sessão
test/
├── core/ # validadores
├── features/ # cubits de login, detecções e alertas
└── widget_test.dart # abertura inicial do aplicativo
Consulte Arquitetura para responsabilidades, dependências e ciclo dos dados. Os detalhes da implementação estão em Integração com o sistema principal. A referência compartilhada com a equipe responsável pelo servidor é o Contrato de dados do software principal.
| Plataforma | Interface | Vibração/notificação | Segundo plano |
|---|---|---|---|
| Android | suportada | suportada | foreground service configurado |
| iOS | suportada | implementada, sujeita às permissões/capabilities | limitado pelo iOS sem push remoto |
| Web/Windows/macOS/Linux | útil para conferir a interface | desativada pelo app | não implementado |
No Android, o manifesto solicita vibração, notificações, tela cheia, wake lock e foreground service. Em Android 13 ou superior, o usuário ainda precisa autorizar notificações em tempo de execução. Fabricantes podem aplicar regras adicionais de economia de bateria.
No iOS, notificações com nível crítico exigem configuração e autorização da Apple além do código já presente. Esse requisito deve ser validado antes de uma distribuição real.
- A senha é usada somente durante a tentativa de conexão e não é persistida.
- IP, porta e usuário podem ser lembrados via armazenamento seguro do sistema.
- O app é de leitura: a confirmação de um alerta não modifica o banco do sistema principal.
- As pessoas são exibidas por códigos, não por nomes reais.
- As credenciais de demonstração estão no código e não devem ser usadas em produção.
- A futura integração deve autenticar as sessões, validar mensagens e proteger o tráfego local (preferencialmente TLS), sem registrar senhas ou dados biométricos em logs.
flutter analyze
flutter testTambém é possível gerar cobertura:
flutter test --coverageNa última verificação, os testes passaram e o analisador não reportou erros de compilação ou análise.
# Android
flutter build apk
flutter build appbundle
# iOS (em macOS)
flutter build ios
# Web
flutter build webAntes de distribuir o Android, substitua a assinatura de depuração configurada
em android/app/build.gradle.kts por uma chave de produção e revise o
applicationId.
- confirmações de alerta não sobrevivem ao encerramento do app;
- a visualização de câmera foi removida temporariamente;
- o monitoramento persistente foi projetado especificamente para Android;
- não há pipeline de integração contínua ou testes de integração nativos.
Este repositório ainda não contém um arquivo de licença. Adicione uma licença antes de permitir uso, modificação ou distribuição por terceiros.