# App de Entregas com Rotas Curvas - Expo Go Este aplicativo React Native com Expo foi desenvolvido para gerenciamento de entregas com rotas curvas como o Uber, funcionando perfeitamente no Expo Go. ## 🚀 Funcionalidades - **Rotas Curvas**: Usa a API do Mapbox para traçar rotas que seguem as ruas, nunca em linha reta - **Compatível com Expo Go**: Funciona sem necessidade de dev build ou EAS Build - **Ordenação Inteligente**: Algoritmo do vizinho mais próximo para otimizar rotas - **Interface Moderna**: UI/UX inspirada no Uber com mapas interativos - **Gestão de Entregas**: Status tracking, fotos, assinaturas e sincronização ## 🛠️ Tecnologias Utilizadas - **React Native** com **Expo SDK 53** - **react-native-maps** para mapas (compatível com Expo Go) - **API do Mapbox** para rotas curvas - **TypeScript** para tipagem segura - **AsyncStorage** e **SQLite** para persistência local - **React Navigation** para navegação ## 📱 Componentes Principais ### 1. DeliveryMap Componente principal que renderiza o mapa com rotas curvas: - Usa `react-native-maps` (compatível com Expo Go) - Integra com API do Mapbox para rotas - Mostra marcadores coloridos por status - Suporte a modo fullscreen ### 2. useMapboxDirections Hook customizado para obter rotas da API do Mapbox: - Calcula rotas otimizadas entre múltiplos pontos - Converte coordenadas GeoJSON para react-native-maps - Tratamento de erros e fallbacks ### 3. sortDeliveriesByDistanceAndDate Função que implementa o algoritmo do vizinho mais próximo: - Calcula distâncias usando fórmula de Haversine - Ordena entregas por proximidade e data - Suporte a geocodificação de endereços ## 🗺️ Como as Rotas Funcionam 1. **Coleta de Coordenadas**: O app coleta coordenadas das entregas (lat/lng) 2. **Ordenação**: Aplica algoritmo do vizinho mais próximo para otimizar rota 3. **API Mapbox**: Envia waypoints ordenados para a API de direções 4. **Rota Curva**: Recebe coordenadas que seguem as ruas (GeoJSON) 5. **Renderização**: Desenha Polyline no mapa com as coordenadas recebidas ## 🚀 Como Executar ```bash # Instalar dependências npm install # Iniciar o projeto npx expo start # Escanear QR code no Expo Go ``` ## 🔧 Configuração ### Token do Mapbox O token já está configurado no código. Para usar seu próprio: 1. Crie uma conta em [mapbox.com](https://mapbox.com) 2. Gere um token de acesso público 3. Substitua em `src/hooks/useMapboxDirections.ts` ### API de Entregas Configure sua API em `src/services/api.ts`: - URL base da API - Endpoints de autenticação e entregas - Headers de autorização ## 📊 Estrutura de Dados ### Interface Delivery ```typescript interface Delivery { id: string; outId: number; customerName: string; street: string; streetNumber: string; neighborhood: string; city: string; state: string; customerPhone: string; lat: number | null; lng: number | null; status: 'in_progress' | 'completed' | 'pending'; coordinates?: { latitude: number; longitude: number; }; // ... outras propriedades } ``` ## 🎯 Vantagens da Solução ### ✅ Compatibilidade com Expo Go - Usa apenas bibliotecas compatíveis com Expo Go - Não requer dev build ou EAS Build - Funciona imediatamente após `expo start` ### ✅ Rotas Realistas - Seguem as ruas reais (não linhas retas) - Consideram sentido das vias - Evitam vias bloqueadas ou restritas ### ✅ Performance Otimizada - Algoritmo eficiente de ordenação - Cache de rotas para evitar requisições desnecessárias - Lazy loading de componentes de mapa ### ✅ UX Profissional - Interface similar ao Uber - Feedback visual em tempo real - Navegação intuitiva entre telas ## 🔄 Fluxo de Trabalho 1. **Login**: Autenticação do entregador 2. **Lista de Entregas**: Visualização de todas as entregas do dia 3. **Rotas**: Mapa com rota otimizada e marcadores 4. **Detalhes**: Informações completas da entrega 5. **Navegação**: Integração com apps de navegação 6. **Finalização**: Captura de fotos e assinatura ## 🐛 Troubleshooting ### Mapa não carrega - Verifique conexão com internet - Confirme se o token do Mapbox está válido - Teste em dispositivo físico (melhor que emulador) ### Rotas não aparecem - Verifique se as entregas têm coordenadas válidas - Confirme se a API do Mapbox está respondendo - Verifique logs no console para erros ### Performance lenta - Reduza número de marcadores simultâneos - Implemente virtualização para listas grandes - Use cache para rotas já calculadas ## 📈 Próximos Passos - [ ] Implementar cache offline de rotas - [ ] Adicionar suporte a múltiplos veículos - [ ] Integrar com sistema de tráfego em tempo real - [ ] Implementar notificações push - [ ] Adicionar analytics de performance ## 🤝 Contribuição 1. Fork o projeto 2. Crie uma branch para sua feature 3. Commit suas mudanças 4. Push para a branch 5. Abra um Pull Request ## 📄 Licença Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes. --- **Desenvolvido para funcionar perfeitamente no Expo Go com rotas curvas como o Uber! 🚚🗺️**