feat: Add geocoding functionality for trips and enhance activity search with coordinates

This commit is contained in:
Dayron
2025-11-04 20:47:26 +01:00
parent f6c8432335
commit 9cb21c3470
9 changed files with 421 additions and 56 deletions

View File

@@ -1282,13 +1282,28 @@ class _ActivitiesPageState extends State<ActivitiesPage>
_totalGoogleActivitiesRequested = 6; // Reset du compteur
_autoReloadInProgress = false; // Reset des protections
_lastAutoReloadTriggerCount = 0;
context.read<ActivityBloc>().add(SearchActivities(
tripId: widget.trip.id!,
destination: widget.trip.location,
category: null, // Rechercher dans toutes les catégories
maxResults: 6, // Charger 6 résultats à la fois
reset: true, // Nouveau flag pour reset
));
// Utiliser les coordonnées pré-géolocalisées du voyage si disponibles
if (widget.trip.hasCoordinates) {
print('🌍 [Google Search] Using pre-geocoded coordinates: ${widget.trip.latitude}, ${widget.trip.longitude}');
context.read<ActivityBloc>().add(SearchActivitiesWithCoordinates(
tripId: widget.trip.id!,
latitude: widget.trip.latitude!,
longitude: widget.trip.longitude!,
category: null, // Rechercher dans toutes les catégories
maxResults: 6, // Charger 6 résultats à la fois
reset: true, // Nouveau flag pour reset
));
} else {
print('⚠️ [Google Search] No coordinates available, falling back to destination geocoding');
context.read<ActivityBloc>().add(SearchActivities(
tripId: widget.trip.id!,
destination: widget.trip.location,
category: null, // Rechercher dans toutes les catégories
maxResults: 6, // Charger 6 résultats à la fois
reset: true, // Nouveau flag pour reset
));
}
_googleSearchPerformed = true;
}
@@ -1297,13 +1312,28 @@ class _ActivitiesPageState extends State<ActivitiesPage>
_totalGoogleActivitiesRequested = 6; // Reset du compteur
_autoReloadInProgress = false; // Reset des protections
_lastAutoReloadTriggerCount = 0;
context.read<ActivityBloc>().add(SearchActivities(
tripId: widget.trip.id!,
destination: widget.trip.location,
category: null,
maxResults: 6,
reset: true,
));
// Utiliser les coordonnées pré-géolocalisées du voyage si disponibles
if (widget.trip.hasCoordinates) {
print('🌍 [Google Search] Using pre-geocoded coordinates: ${widget.trip.latitude}, ${widget.trip.longitude}');
context.read<ActivityBloc>().add(SearchActivitiesWithCoordinates(
tripId: widget.trip.id!,
latitude: widget.trip.latitude!,
longitude: widget.trip.longitude!,
category: null,
maxResults: 6,
reset: true,
));
} else {
print('⚠️ [Google Search] No coordinates available, falling back to destination geocoding');
context.read<ActivityBloc>().add(SearchActivities(
tripId: widget.trip.id!,
destination: widget.trip.location,
category: null,
maxResults: 6,
reset: true,
));
}
_googleSearchPerformed = true;
}
@@ -1317,13 +1347,28 @@ class _ActivitiesPageState extends State<ActivitiesPage>
print('📊 [Google Search] Current results count: $currentCount, requesting total: $newTotal');
_totalGoogleActivitiesRequested = newTotal;
context.read<ActivityBloc>().add(SearchActivities(
tripId: widget.trip.id!,
destination: widget.trip.location,
category: null,
maxResults: newTotal, // Demander le total cumulé
reset: true, // Reset pour avoir tous les résultats d'un coup
));
// Utiliser les coordonnées pré-géolocalisées du voyage si disponibles
if (widget.trip.hasCoordinates) {
print('🌍 [Google Search] Using pre-geocoded coordinates for more results');
context.read<ActivityBloc>().add(SearchActivitiesWithCoordinates(
tripId: widget.trip.id!,
latitude: widget.trip.latitude!,
longitude: widget.trip.longitude!,
category: null,
maxResults: newTotal, // Demander le total cumulé
reset: true, // Reset pour avoir tous les résultats d'un coup
));
} else {
print('⚠️ [Google Search] No coordinates available, falling back to destination geocoding');
context.read<ActivityBloc>().add(SearchActivities(
tripId: widget.trip.id!,
destination: widget.trip.location,
category: null,
maxResults: newTotal, // Demander le total cumulé
reset: true, // Reset pour avoir tous les résultats d'un coup
));
}
}
}
@@ -1339,26 +1384,54 @@ class _ActivitiesPageState extends State<ActivitiesPage>
print('📊 [Google Search] Current: $currentCount, Total demandé: $totalToRequest, Additional: $additionalNeeded');
if (additionalNeeded > 0) {
context.read<ActivityBloc>().add(SearchActivities(
tripId: widget.trip.id!,
destination: widget.trip.location,
category: null,
maxResults: additionalNeeded,
offset: currentCount,
appendToExisting: true, // Ajouter aux résultats existants
));
// Utiliser les coordonnées pré-géolocalisées du voyage si disponibles
if (widget.trip.hasCoordinates) {
print('🌍 [Google Search] Using pre-geocoded coordinates for additional results');
context.read<ActivityBloc>().add(SearchActivitiesWithCoordinates(
tripId: widget.trip.id!,
latitude: widget.trip.latitude!,
longitude: widget.trip.longitude!,
category: null,
maxResults: additionalNeeded,
offset: currentCount,
appendToExisting: true, // Ajouter aux résultats existants
));
} else {
print('⚠️ [Google Search] No coordinates available, falling back to destination geocoding');
context.read<ActivityBloc>().add(SearchActivities(
tripId: widget.trip.id!,
destination: widget.trip.location,
category: null,
maxResults: additionalNeeded,
offset: currentCount,
appendToExisting: true, // Ajouter aux résultats existants
));
}
} else {
print('⚠️ [Google Search] Pas besoin de charger plus (déjà suffisant)');
}
} else {
// Si pas de résultats existants, faire une recherche complète
context.read<ActivityBloc>().add(SearchActivities(
tripId: widget.trip.id!,
destination: widget.trip.location,
category: null,
maxResults: totalToRequest,
reset: true,
));
if (widget.trip.hasCoordinates) {
print('🌍 [Google Search] Using pre-geocoded coordinates for fresh search');
context.read<ActivityBloc>().add(SearchActivitiesWithCoordinates(
tripId: widget.trip.id!,
latitude: widget.trip.latitude!,
longitude: widget.trip.longitude!,
category: null,
maxResults: totalToRequest,
reset: true,
));
} else {
print('⚠️ [Google Search] No coordinates available, falling back to destination geocoding');
context.read<ActivityBloc>().add(SearchActivities(
tripId: widget.trip.id!,
destination: widget.trip.location,
category: null,
maxResults: totalToRequest,
reset: true,
));
}
}
}
}