Desenvolvimento Mobile
| Orçamento: Aberto |
Publicado: |
Propostas: 22
## Objetivo
Construir um app Flutter completo para gestão de entregas, com dois perfis (Entregador e Estabelecimento), autenticação Firebase, rastreamento GPS em tempo real, cálculo de km/litros e painel do estabelecimento.
---
## Arquitetura
```mermaid
flowchart TD
A[Login Screen] --> B{Perfil}
B -->|Entregador| C[Dashboard Entregador]
B -->|Estabelecimento| D[Dashboard Estabelecimento]
C --> E[Iniciar Turno]
E --> F[GPS Tracking Loop\nintervalo de 10s]
F --> G[Firestore: salva posição\n+ KM acumulado]
G --> H[Finalizar Turno]
H --> I[Relatório do Turno]
D --> J[Lista de Entregadores Ativos]
J --> K[Mapa com posição em tempo real]
D --> L[Histórico de Turnos]
```
---
## Estrutura de Arquivos
```
lib/
- main.dart
- firebase_options.dart - gerado pelo FlutterFire CLI
- models/
- usuario.dart - modelo User (nome, perfil, uid)
- turno.dart - modelo Turno (km, litros, rota, duração)
- services/
- auth_service.dart - login/logout Firebase Auth
- firestore_service.dart - CRUD turnos e posições
- gps_service.dart - stream de posição, cálculo de distância
- screens/
- login_screen.dart - email + senha + seleção de perfil
- register_screen.dart - cadastro entregador ou estabelecimento
- entregador/
- home_entregador.dart - dashboard + botão iniciar/finalizar
- relatorio_screen.dart - relatório do turno com PDF
- estabelecimento/
- home_estabelecimento.dart - lista de entregadores ativos
- mapa_entregadores.dart - mapa com todos os pins ao vivo
- widgets/
- metric_card.dart - card reutilizável KM / Litros / Tempo
- entregador_tile.dart - item da lista de entregadores
```
---
## Banco de Dados Firestore
```
usuarios/{uid}
- nome: string
- email: string
- perfil: "entregador" | "estabelecimento"
- estabelecimentoId: string (só para entregadores)
turnos/{turnoId}
- entregadorId: string
- entregadorNome: string
- inicio: timestamp
- fim: timestamp | null
- kmTotal: number
- litrosConsumidos: number
- ativo: boolean
- rota: array<{lat, lng}>
posicoes/{uid}
- lat: number
- lng: number
- atualizadoEm: timestamp
- turnoId: string
```
---
## Dependências (`pubspec.yaml`)
| Pacote | Uso |
|---|---|
| `firebase_core` | Inicialização Firebase |
| `firebase_auth` | Login/logout |
| `cloud_firestore` | Banco de dados |
| `google_maps_flutter` | Mapa e polyline |
| `geolocator` | GPS posição atual |
| `shared_preferences` | Cache local |
| `pdf` + `printing` | Exportar relatório PDF |
| `provider` | Gerenciamento de estado |
---
## Etapas de Implementação
### 1. Setup do Projeto Flutter
- Criar projeto Flutter limpo: `flutter create entrega_app`
- Configurar Firebase com `flutterfire configure`
- Adicionar todas as dependências no `pubspec.yaml`
- Configurar `AndroidManifest.xml` (permissões GPS + internet)
### 2. Models
- `usuario.dart` - fromMap/toMap, campo `perfil`
- `turno.dart` - fromMap/toMap, campos km, litros, rota, ativo
### 3. Services
- `auth_service.dart` - `login()`, `register()`, `logout()`, `currentUser`
- `firestore_service.dart` - `iniciarTurno()`, `finalizarTurno()`, `atualizarPosicao()`, `streamEntregadoresAtivos()`
- `gps_service.dart` - stream de posição com `Geolocator`, cálculo de distância acumulada
### 4. Telas de Autenticação
- `login_screen.dart` - campos email/senha, seleção de perfil (radio button), botão entrar e link para cadastro
- `register_screen.dart` - nome, email, senha, perfil
### 5. Telas do Entregador
- `home_entregador.dart` - cards KM/Litros/Tempo, mapa com polyline da rota, botões Iniciar/Finalizar turno
- `relatorio_screen.dart` - resumo do turno + botão exportar PDF real (pacote `pdf`)
### 6. Telas do Estabelecimento
- `home_estabelecimento.dart` - lista em tempo real dos entregadores ativos via `StreamBuilder`
- `mapa_entregadores.dart` - Google Maps com marcadores de todos os entregadores ativos atualizando via stream Firestore
### 7. Navegação e Estado
- `main.dart` - `StreamBuilder` no `FirebaseAuth.authStateChanges()` para redirecionar automaticamente por perfil
- `Provider` para estado do turno ativo
### 8. Verificação Final
- Testar login entregador - iniciar turno - GPS atualiza - estabelecimento vê no mapa
- Testar finalizar turno - relatório - exportar PDF
- Testar logout e redirecionamento correto por perfil
---
## Verificação / DoD
| Item | Como verificar |
|---|---|
| Login dual funciona | Entrar como entregador e como estabelecimento com contas diferentes |
| GPS atualiza Firestore | Ver documento `posicoes/{uid}` atualizar a cada 10s |
| Estabelecimento vê mapa ao vivo | Pin do entregador se move no mapa do estabelecimento |
| KM e litros calculados | Percorrer rota e conferir valores no relatório |
| PDF gerado | Botão exportar abre preview do PDF com dados do turno.