import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Intaleq/constant/table_names.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/toast.dart'; import '../../../controller/home/map_passenger_controller.dart'; import '../../../main.dart'; GetBuilder formSearchPlacesStart() { return GetBuilder( 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 > 5) { // Reduced character limit controller.getPlacesStart(); controller.changeHeightStartPlaces(); } else if (controller.placeStartController.text.isEmpty) { controller.clearPlacesStart(); controller.changeHeightPlaces(); // Collapse if empty } }, decoration: InputDecoration( hintText: controller.hintTextStartPoint, 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(); controller .changeHeightPlaces(); // Collapse on clear }, ) : 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.startLocationFromMap = true; controller.changeMainBottomMenuMap(); controller.changePickerShown(); }, icon: Icon(Icons.location_on_outlined, color: AppColor.accentColor, size: 30), tooltip: 'Choose on Map', ), ], ), ), AnimatedContainer( duration: const Duration(milliseconds: 200), height: controller.placesStart.isNotEmpty ? controller.height : 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 NeverScrollableScrollPhysics(), itemCount: controller.placesStart.length, separatorBuilder: (context, index) => const Divider(height: 1, color: Colors.grey), itemBuilder: (BuildContext context, int index) { var res = controller.placesStart[index]; return ListTile( leading: Image.network(res['icon'], width: 30, height: 30), title: Text(res['name'].toString(), style: AppStyle.subtitle .copyWith(fontWeight: FontWeight.w500)), subtitle: Text(res['vicinity'].toString(), style: TextStyle(color: Colors.grey[600], fontSize: 12)), trailing: IconButton( icon: const Icon(Icons.favorite_border, color: Colors.grey), onPressed: () async { await sql.insertMapLocation({ 'latitude': res['geometry']['location']['lat'], 'longitude': res['geometry']['location']['lng'], 'name': res['name'].toString(), 'rate': res['rating'].toString(), }, TableName.placesFavorite); Toast.show( context, '${res['name']} ${'Saved Successfully'.tr}', AppColor.primaryColor); }, ), onTap: () async { controller.changeHeightPlaces(); await sql.insertMapLocation({ 'latitude': res['geometry']['location']['lat'], 'longitude': res['geometry']['location']['lng'], 'name': res['name'].toString(), 'rate': res['rating'].toString(), 'createdAt': DateTime.now().toIso8601String(), }, TableName.recentLocations); controller.convertHintTextStartNewPlaces(index); controller.currentLocationString = res['name']; controller.placesStart = []; controller.placeStartController.clear(); }, ); }, ), ), ], ), ); }