6.1 KiB
6.1 KiB
Recarregamento da HomeScreen Após Roteamento
Funcionalidade Implementada
Após a função sendRoutingOrder() ser executada com sucesso, a HomeScreen é automaticamente recarregada para mostrar a próxima entrega de acordo com as novas ordens de roteamento.
Fluxo de Funcionamento
1. Roteamento no RoutesScreen
- Usuário desenha/otimiza a rota no mapa
- Sistema calcula a ordem otimizada das entregas
- Função
sendRoutingAfterMapRoute()é chamada
2. Envio para API
- Dados de roteamento são enviados para
/v1/driver/routing - API processa e atualiza a ordem das entregas
- Sistema aguarda confirmação de sucesso
3. Recarregamento Automático
- Após sucesso, navegação automática para HomeScreen
- Parâmetros especiais são passados:
refreshDeliveries: trueeroutingUpdated: true - HomeScreen detecta os parâmetros e recarrega as entregas
4. Atualização da Interface
- Próxima entrega é recalculada baseada na nova ordem
- Interface é atualizada automaticamente
- Feedback visual é mostrado ao usuário
Implementação Técnica
RoutesScreen.tsx - Função handleRouteCalculated
const handleRouteCalculated = async (optimizedDeliveries: Delivery[]) => {
try {
// Enviar roteamento para a API
const result = await api.sendRoutingAfterMapRoute(optimizedDeliveries);
// Recarregar a HomeScreen para mostrar a próxima entrega
console.log('=== DEBUG: RECARREGANDO HOMESCREEN APÓS ROTEAMENTO ===');
// Navegar de volta para a HomeScreen com flag de recarregamento
// @ts-ignore
navigation.navigate('Home', {
refreshDeliveries: true,
routingUpdated: true
});
// Mostrar feedback para o usuário
Alert.alert(
"Roteamento Atualizado",
"A ordem das entregas foi atualizada com sucesso! A próxima entrega foi recalculada.",
[{ text: "OK" }]
);
} catch (error) {
// Tratamento de erro com feedback ao usuário
Alert.alert(
"Erro no Roteamento",
"Não foi possível atualizar a ordem das entregas. Tente novamente.",
[{ text: "OK" }]
);
}
}
HomeScreen.tsx - Detecção de Parâmetros
useFocusEffect(
React.useCallback(() => {
// Verificar parâmetros da rota
const params = route.params as {
refreshDeliveries?: boolean;
routingUpdated?: boolean
} | undefined
const shouldRefresh = params?.refreshDeliveries
const routingUpdated = params?.routingUpdated
if (hasInitialized) {
// Se foi atualizado o roteamento, mostrar mensagem específica
if (routingUpdated) {
console.log("=== ROTEAMENTO ATUALIZADO - RECARREGANDO ENTREGAS ===")
}
loadDeliveries()
// Limpar os parâmetros após usar
if (shouldRefresh || routingUpdated) {
navigation.setParams({
refreshDeliveries: undefined,
routingUpdated: undefined
})
}
}
}, [hasInitialized, route.params])
)
Logs de Debug
RoutesScreen - Envio do Roteamento
=== DEBUG: ROTA CALCULADA - ENVIANDO PARA API ===
Entregas otimizadas recebidas: 5
=== DEBUG: ROTEAMENTO ENVIADO COM SUCESSO ===
Resultado: { success: true, data: [...] }
=== DEBUG: RECARREGANDO HOMESCREEN APÓS ROTEAMENTO ===
HomeScreen - Detecção de Recarregamento
=== HomeScreen useFocusEffect ===
hasInitialized: true
shouldRefresh: true
routingUpdated: true
route.params: { refreshDeliveries: true, routingUpdated: true }
=== ROTEAMENTO ATUALIZADO - RECARREGANDO ENTREGAS ===
=== INICIANDO CARREGAMENTO DE ENTREGAS ===
=== LIMPANDO PARÂMETROS DA ROTA ===
Benefícios
🎯 Atualização Automática
- Próxima entrega é recalculada automaticamente
- Não requer ação manual do usuário
- Interface sempre sincronizada com o backend
🚀 Experiência do Usuário
- Feedback imediato sobre sucesso/falha
- Transição suave entre telas
- Indicação clara de que a ordem foi atualizada
🔧 Robustez
- Tratamento de erros com feedback ao usuário
- Logs detalhados para debug
- Limpeza automática de parâmetros
📱 Integração
- Compatível com sistema de navegação existente
- Não interfere com outras funcionalidades
- Mantém estado da aplicação consistente
Cenários de Uso
✅ Cenário de Sucesso
- Usuário otimiza rota no RoutesScreen
- Sistema envia dados para API
- API confirma sucesso
- HomeScreen é recarregada automaticamente
- Próxima entrega é atualizada
- Usuário vê feedback de sucesso
❌ Cenário de Erro
- Usuário otimiza rota no RoutesScreen
- Sistema tenta enviar dados para API
- API retorna erro
- Usuário vê alerta de erro
- HomeScreen não é recarregada
- Usuário pode tentar novamente
Compatibilidade
✅ Plataformas
- Android: Totalmente compatível
- iOS: Totalmente compatível
- Expo SDK 53: Compatível
✅ Navegação
- React Navigation: Integração nativa
- Stack Navigation: Suporte completo
- Parâmetros de Rota: Tipagem TypeScript
✅ Estados
- Online: Funciona normalmente
- Offline: Tratamento de erro adequado
- Transições: Suaves e responsivas
Como Testar
1. Teste de Roteamento
# Build de produção
npx expo run:android --variant release
2. Cenários de Teste
- Roteamento bem-sucedido: Deve recarregar HomeScreen e mostrar próxima entrega
- Erro de API: Deve mostrar alerta de erro sem recarregar
- Navegação manual: Deve funcionar normalmente
- Múltiplas atualizações: Deve lidar com várias atualizações consecutivas
3. Verificação de Logs
- Verificar logs no console para confirmar fluxo
- Confirmar limpeza de parâmetros
- Validar atualização da próxima entrega
Próximos Passos
🔮 Melhorias Futuras
- Cache Inteligente: Evitar recarregamento desnecessário
- Sincronização em Tempo Real: WebSocket para atualizações automáticas
- Histórico de Roteamento: Salvar histórico de mudanças
- Otimização de Performance: Lazy loading de dados