import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import '../../screens/location/location_picker_Screen.dart'; /// `LocationField` est un champ de saisie permettant de sélectionner une localisation sur une carte. /// Il utilise la page `LocationPickerScreen` pour permettre à l'utilisateur de choisir un emplacement précis. /// Ce widget est utilisé dans des formulaires et permet d'afficher la localisation sélectionnée. /// /// Arguments : /// - `location`: Une chaîne représentant la localisation actuelle à afficher. /// - `selectedLatLng`: Une variable de type `LatLng?` représentant la latitude et la longitude de la localisation sélectionnée. /// - `onLocationPicked`: Un callback pour retourner la localisation choisie par l'utilisateur. /// class LocationField extends StatelessWidget { final String location; final LatLng? selectedLatLng; final Function(LatLng?) onLocationPicked; const LocationField({Key? key, required this.location, this.selectedLatLng, required this.onLocationPicked}) : super(key: key); @override Widget build(BuildContext context) { // Log : Construction du champ LocationField debugPrint('Construction du champ LocationField'); return GestureDetector( onTap: () async { // Log : L'utilisateur clique pour choisir une localisation debugPrint('Utilisateur clique pour choisir une localisation'); final LatLng? pickedLocation = await Navigator.push( context, MaterialPageRoute( builder: (context) => const LocationPickerScreen(), ), ); if (pickedLocation != null) { // Log : L'utilisateur a sélectionné une nouvelle localisation debugPrint('Nouvelle localisation sélectionnée : $pickedLocation'); onLocationPicked(pickedLocation); } }, child: AnimatedContainer( duration: const Duration(milliseconds: 300), // Animation fluide lors du focus padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0), decoration: BoxDecoration( color: Colors.blueGrey.withOpacity(0.1), // Fond plus visible, subtilement coloré borderRadius: BorderRadius.circular(12.0), // Bordure arrondie améliorée border: Border.all( color: selectedLatLng == null ? Colors.blueGrey.withOpacity(0.5) : Colors.blue, // Bordure change selon l'état width: 2.0, ), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( selectedLatLng == null ? 'Sélectionnez une localisation' // Message par défaut si aucune localisation sélectionnée : 'Localisation: $location', // Affiche la localisation actuelle style: const TextStyle(color: Colors.blueGrey, fontSize: 16.0), ), const Icon(Icons.location_on, color: Colors.blueGrey), ], ), ), ); } }