entregas_app/docs/RECARREGAMENTO_APOS_ROTEAME...

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: true e routingUpdated: 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

  1. Usuário otimiza rota no RoutesScreen
  2. Sistema envia dados para API
  3. API confirma sucesso
  4. HomeScreen é recarregada automaticamente
  5. Próxima entrega é atualizada
  6. Usuário vê feedback de sucesso

Cenário de Erro

  1. Usuário otimiza rota no RoutesScreen
  2. Sistema tenta enviar dados para API
  3. API retorna erro
  4. Usuário vê alerta de erro
  5. HomeScreen não é recarregada
  6. 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