import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/home/map_passenger_controller.dart'; // --------------------------------------------------- // -- Widget for Start Point Search -- // --------------------------------------------------- GetBuilder formSearchPlacesStart() { return GetBuilder( builder: (controller) => Column( children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), child: TextFormField( controller: controller.placeStartController, onChanged: (value) { if (controller.placeStartController.text.length > 2) { controller.getPlacesStart(); } else if (controller.placeStartController.text.isEmpty) { controller.clearPlacesStart(); } }, decoration: InputDecoration( hintText: 'Search for a starting point'.tr, hintStyle: AppStyle.subtitle.copyWith(color: Colors.grey[600]), prefixIcon: const Icon(Icons.search, color: AppColor.primaryColor), suffixIcon: controller.placeStartController.text.isNotEmpty ? IconButton( icon: Icon(Icons.clear, color: Colors.grey[400]), onPressed: () { controller.placeStartController.clear(); controller.clearPlacesStart(); }, ) : null, contentPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 10.0), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), borderSide: BorderSide.none, ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), borderSide: BorderSide(color: AppColor.primaryColor), ), filled: true, fillColor: Colors.grey[50], ), ), ), AnimatedContainer( duration: const Duration(milliseconds: 200), height: controller.placesStart.isNotEmpty ? 300 : 0, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8.0), ), margin: const EdgeInsets.symmetric(horizontal: 16.0), child: ListView.separated( shrinkWrap: true, physics: const ClampingScrollPhysics(), itemCount: controller.placesStart.length, separatorBuilder: (context, index) => const Divider(height: 1, color: Colors.grey), itemBuilder: (BuildContext context, int index) { var res = controller.placesStart[index]; var title = res['name_ar'] ?? res['name'] ?? 'Unknown Place'; var address = res['address'] ?? 'Details not available'; return ListTile( leading: const Icon(Icons.place, size: 30, color: Colors.grey), title: Text(title, style: AppStyle.subtitle .copyWith(fontWeight: FontWeight.w500)), subtitle: Text(address, style: TextStyle(color: Colors.grey[600], fontSize: 12)), onTap: () { var latitude = res['latitude']; var longitude = res['longitude']; if (latitude != null && longitude != null) { controller.passengerLocation = LatLng(double.parse(latitude), double.parse(longitude)); controller.placeStartController.text = title; controller.clearPlacesStart(); // You might want to update the camera position on the map here controller.update(); } }, ); }, ), ), ], ), ); }