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 (Updated) -- // --------------------------------------------------- GetBuilder formSearchPlacesStart() { return GetBuilder( id: 'start_point_form', // إضافة معرف لتحديث هذا الجزء فقط عند الحاجة builder: (controller) => Column( children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), child: Row( children: [ // --- حقل البحث النصي --- Expanded( 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], ), ), ), const SizedBox(width: 8.0), // --- أيقونة اختيار الموقع من الخريطة (الجزء المضاف) --- IconButton( onPressed: () { // هذا السطر مهم جداً: نخبر الكونترولر أننا نحدد نقطة البداية الآن controller.passengerStartLocationFromMap = true; // إخفاء القائمة السفلية وفتح مؤشر الخريطة (Picker) controller.changeMainBottomMenuMap(); controller.changePickerShown(); }, icon: Icon(Icons.location_on_outlined, color: AppColor.accentColor, size: 30), tooltip: 'Pick start point on map'.tr, ), ], ), ), // --- قائمة نتائج البحث --- 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(); // إغلاق القائمة والعودة للخريطة لرؤية النتيجة (اختياري حسب منطق تطبيقك) controller.changeMainBottomMenuMap(); controller.update(); } }, ); }, ), ), ], ), ); }