Vanguru Mobile
Aplicativo em Flutter para gerenciamento e acompanhamento de rotas de transporte escolar.
✨ Funcionalidades
🚌 Gestão de Rotas e Execução
- Criação e edição de rotas de transporte escolar
- Execução de rotas em tempo real com rastreamento GPS
- Visualização de rotas no mapa com Google Maps
- Notificações automáticas para responsáveis ("Cheguei", etc.)
- Histórico completo de execuções
👥 Gestão de Passageiros
- Cadastro completo de passageiros e responsáveis
- Múltiplos responsáveis por passageiro
- Integração com instituições de ensino
- Perfis completos vs. incompletos
- Gerenciamento de endereços e contatos
📄 Sistema de Contratos
- Criação e gestão de contratos (Free e Premium)
- Suspensão e reativação de contratos
- Histórico de atividades (audit trail)
- Diferentes tiers de serviço
- Contratos vinculados a passageiros
💰 Sistema de Pagamentos
- Modo Free: Pagamentos manuais com comprovante
- Modo Premium: Integração com gateway de pagamento (Asaas)
- Geração automática de boletos e PIX
- Acompanhamento de status (pendente, pago, vencido)
- Histórico completo de atividades de pagamento
- Notificações de vencimento
- Dashboard financeiro na tela inicial
🔐 Autenticação e Segurança
- Autenticação via Firebase Authentication
- Controle de acesso por perfil (motorista, responsável, admin)
- API keys gerenciadas via variáveis de ambiente
- Firestore Security Rules implementadas
🏛️ Arquitetura
O projeto utiliza uma arquitetura limpa (Clean Architecture) dividida em camadas, com uma separação clara de responsabilidades. A estrutura de pastas é orientada a funcionalidades (features).
- State Management & Injeção de Dependência: A gerência de estado e a injeção de dependência são feitas com flutter_riverpod, que provê uma solução reativa e robusta para o estado da aplicação.
- Imutabilidade: Os modelos e estados usam o pacote equatable para facilitar comparações e evitar rebuilds desnecessários da UI.
📁 Estrutura do Projeto
lib/
├── core/ # Código compartilhado
│ ├── domain/ # Modelos de domínio core
│ ├── providers/ # Providers globais
│ ├── theme/ # Tema e estilos
│ └── utils/ # Utilitários
├── features/ # Funcionalidades (Clean Architecture)
│ ├── contracts/ # Sistema de contratos
│ │ ├── domain/ # Modelos e enums
│ │ ├── data/ # Repositories e data sources
│ │ └── presentation/ # Screens, widgets e providers
│ ├── payments/ # Sistema de pagamentos
│ ├── passengers/ # Gestão de passageiros
│ ├── routes-creations/ # Criação de rotas
│ ├── routes-executions/ # Execução de rotas
│ └── ...
└── main.dart
Cada feature segue a Clean Architecture com separação clara entre: - Domain: Modelos, enums e interfaces - Data: Implementação de repositories e acesso a dados - Presentation: UI, widgets e state management
📚 Documentação Técnica
Para informações detalhadas sobre funcionalidades específicas, consulte: - API de Segurança: api/functions.md - API de Pagamentos: api/payments.md - Guia de LGPD: seguranca/lgpd.md - Guia de Desenvolvimento de Pagamentos: guia/pagamentos.md
🛠️ Serviços e APIs Externas
O aplicativo depende dos seguintes serviços externos:
- Firebase:
- Firebase Authentication: Para o sistema de login e gerenciamento de usuários.
- Cloud Firestore: Utilizado como banco de dados NoSQL para armazenar todas as informações da aplicação (rotas, usuários, etc.).
- Google Maps Platform:
- Google Maps for Flutter: Para a exibição dos mapas.
- Geolocator: Para obter a localização do dispositivo.
- Directions API: Para traçar as polilinhas das rotas no mapa (através do
flutter_polyline_points).
🚀 Guia de Instalação e Execução Local
Siga os passos abaixo para configurar o ambiente de desenvolvimento e rodar o projeto localmente.
1. Pré-requisitos
- Flutter: Certifique-se de ter o Flutter SDK instalado. A versão utilizada está no
pubspec.yaml. - Firebase CLI: Instale a Firebase CLI para configurar o projeto.
2. Configuração do Firebase
- Crie um novo projeto no Firebase Console.
- Configure um aplicativo para Android e um para iOS dentro do seu projeto Firebase.
- Para Android: Baixe o arquivo
google-services.jsone coloque-o emandroid/app/. - Para iOS: Baixe o arquivo
GoogleService-Info.pliste coloque-o emios/Runner/.
3. Chaves de API (API Keys)
-
No Google Cloud Console (associado ao seu projeto Firebase), ative as seguintes APIs e gere as chaves:
- Maps SDK for Android: Gere uma chave de API.
- Maps SDK for iOS: Gere uma chave de API.
- Directions API: Gere uma chave de API.
-
As chaves precisam ser fornecidas ao Flutter no momento da execução. Este projeto utiliza
dart-definepara injetar as chaves como variáveis de ambiente.
4. Executando o Aplicativo
Para compilar e rodar o app, utilize o comando flutter run com os seguintes argumentos --dart-define:
flutter run --dart-define=GOOGLE_MAPS_API_KEY="SUA_CHAVE_MAPS_AQUI" --dart-define=GOOGLE_APIS_REST_KEY="SUA_CHAVE_DIRECTIONS_AQUI"
Substitua:
* SUA_CHAVE_MAPS_AQUI: Pela chave que você gerou para o Maps SDK (Android ou iOS).
* SUA_CHAVE_DIRECTIONS_AQUI: Pela chave que você gerou para a Directions API.
5. Scripts Úteis
- Gerar Ícones: Se você alterar o ícone do app em
assets/images/app_icon.png, rode o seguinte comando para atualizar os ícones de todas as plataformas:bash flutter pub run flutter_launcher_icons
6. Build Web
Para fazer o build da versão web do aplicativo:
flutter build web \
--dart-define=GOOGLE_MAPS_API_KEY="SUA_CHAVE_MAPS_AQUI" \
--dart-define=GOOGLE_APIS_REST_KEY="SUA_CHAVE_DIRECTIONS_AQUI" \
--web-renderer canvaskit \
--release
Os arquivos compilados estarão em build/web/.
7. Controle LGPD (Dev vs Prod)
Para garantir segurança total em produção e redução de custos em desenvolvimento, o app utiliza o Firebase Remote Config para controlar o fluxo de dados sensíveis (LGPD).
- Produção (
Release Mode): Sempre utiliza Cloud Functions (Segurança Máxima). A flag de bypass é ignorada/removida pelo compilador. - Desenvolvimento (
Debug Mode): O comportamento é definido pela flagsecurity_use_functions_bypassno Remote Config.false(Padrão): Usa Cloud Functions (Simula produção, consome cotas/custo).true: Usa Firestore Bypass (Escrita direta no banco, custo zero, menor segurança).
Para ativar o Modo Econômico em Dev (Backoffice):
1. Acesse o Firebase Console > Remote Config.
2. Crie/Edite o parâmetro security_use_functions_bypass.
3. Defina o valor como true (Tipo Boolean).
4. Publique as alterações.
5. Reinicie o app (o fetch ocorre na inicialização).