feat: Add geocoding functionality for trips and enhance activity search with coordinates
This commit is contained in:
@@ -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,
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import '../../repositories/group_repository.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||
import '../../services/place_image_service.dart';
|
||||
import '../../services/trip_geocoding_service.dart';
|
||||
|
||||
/// Create trip content widget for trip creation and editing functionality.
|
||||
///
|
||||
@@ -71,6 +72,7 @@ class _CreateTripContentState extends State<CreateTripContent> {
|
||||
final _userService = UserService();
|
||||
final _groupRepository = GroupRepository();
|
||||
final _placeImageService = PlaceImageService();
|
||||
final _tripGeocodingService = TripGeocodingService();
|
||||
|
||||
/// Trip date variables
|
||||
DateTime? _startDate;
|
||||
@@ -1060,9 +1062,30 @@ class _CreateTripContentState extends State<CreateTripContent> {
|
||||
imageUrl: _selectedImageUrl, // Ajouter l'URL de l'image
|
||||
);
|
||||
|
||||
// Géolocaliser le voyage avant de le sauvegarder
|
||||
Trip tripWithCoordinates;
|
||||
try {
|
||||
print('🌍 [CreateTrip] Géolocalisation en cours pour: ${trip.location}');
|
||||
tripWithCoordinates = await _tripGeocodingService.geocodeTrip(trip);
|
||||
print('✅ [CreateTrip] Géolocalisation réussie: ${tripWithCoordinates.latitude}, ${tripWithCoordinates.longitude}');
|
||||
} catch (e) {
|
||||
print('⚠️ [CreateTrip] Erreur de géolocalisation: $e');
|
||||
// Continuer sans coordonnées en cas d'erreur
|
||||
tripWithCoordinates = trip;
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text('Voyage créé sans géolocalisation (pas d\'impact sur les fonctionnalités)'),
|
||||
backgroundColor: Colors.orange,
|
||||
duration: Duration(seconds: 2),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (isEditing) {
|
||||
// Mode mise à jour
|
||||
tripBloc.add(TripUpdateRequested(trip: trip));
|
||||
tripBloc.add(TripUpdateRequested(trip: tripWithCoordinates));
|
||||
|
||||
await _updateGroupMembers(
|
||||
widget.tripToEdit!.id!,
|
||||
@@ -1072,7 +1095,7 @@ class _CreateTripContentState extends State<CreateTripContent> {
|
||||
|
||||
} else {
|
||||
// Mode création - Le groupe sera créé dans le listener TripCreated
|
||||
tripBloc.add(TripCreateRequested(trip: trip));
|
||||
tripBloc.add(TripCreateRequested(trip: tripWithCoordinates));
|
||||
}
|
||||
} catch (e) {
|
||||
if (mounted) {
|
||||
|
||||
Reference in New Issue
Block a user