import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/style.dart'; import 'package:SEFER/controller/home/map_passenger_controller.dart'; import 'package:SEFER/main.dart'; import 'package:SEFER/views/home/map_widget.dart/form_search_places_destenation.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import '../../../constant/colors.dart'; import '../../../constant/table_names.dart'; import '../../../controller/functions/toast.dart'; import '../../../controller/functions/tts.dart'; import 'form_search_start.dart'; class MainBottomMenuMap extends StatelessWidget { const MainBottomMenuMap({super.key}); @override Widget build(BuildContext context) { Get.put(MapPassengerController()); return GetBuilder( builder: (controller) => Positioned( bottom: 3, left: 5, right: 5, child: GestureDetector( onVerticalDragUpdate: (DragUpdateDetails details) { // Update the size of the GestureDetector based on the user's finger position. // _height = details.globalPosition.dy; controller.changeMainBottomMenuMap(); }, child: AnimatedContainer( duration: const Duration(milliseconds: 500), height: controller.mainBottomMenuMapHeight, decoration: AppStyle.boxDecoration, child: SingleChildScrollView( child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ controller.isMainBottomMenuMap ? Padding( padding: const EdgeInsets.all(15), child: InkWell( onTap: () => controller.changeMainBottomMenuMap(), child: Container( width: Get.width * .8, height: Get.height * .1, decoration: AppStyle.boxDecoration1, child: DefaultTextStyle( style: AppStyle.title, child: Center( child: controller.isPickerShown ? clickPointPosition( controller, context) : whereWidgetsmall(controller), ), )), ), ) : IconButton( onPressed: () { controller.changeMainBottomMenuMap(); }, icon: controller.isMainBottomMenuMap ? const Icon( Icons.ads_click, size: 35, ) : const Icon( Icons.arrow_circle_down_rounded, size: 35, ), ), controller.isMainBottomMenuMap ? recentPlacesWidget(controller) : const SizedBox(), // controller.isMainBottomMenuMap // ? const SizedBox() // : InkWell( // onTap: () async { // controller.getCurrentLocationFormString(); // }, // child: Text( // 'From :'.tr + // ' ${controller.currentLocationString}'.tr, // style: AppStyle.subtitle, // ), // ), controller.isMainBottomMenuMap ? const SizedBox() : Column( children: [ // controller.currentLocationToFormPlaces // ? const SizedBox() // : // formSearchPlacesStart(), formSearchPlacesDestenation(), const SizedBox( height: 10, ), MyElevatedButton( title: 'Get Details of Trip'.tr, onPressed: () async { controller.changeMainBottomMenuMap(); await controller.getMap( '${controller.newStartPointLocation.latitude},${controller.newStartPointLocation.longitude}', '${controller.newMyLocation.latitude},${controller.newMyLocation.longitude}', ); controller.currentLocationToFormPlaces = false; controller.placesDestination = []; // controller.isCancelRidePageShown = true; controller.clearPlacesStart(); controller.clearPlacesDestination(); controller.showBottomSheet1(); Get.back(); controller.showBottomSheet1(); }), TextButton( onPressed: () { controller.changeMainBottomMenuMap(); controller.changeWayPointSheet(); }, child: Text( "If you want add stop click here".tr, style: AppStyle.title, ), ), ], ) ], ), ), ), ), )); } SizedBox recentPlacesWidget(MapPassengerController controller) { final textToSpeechController = Get.put(TextToSpeechController()); return SizedBox( height: 50, child: ListView.builder( itemCount: controller.recentPlaces.length, scrollDirection: Axis.horizontal, itemBuilder: (BuildContext context, int index) { return TextButton( onPressed: () { Get.defaultDialog( title: 'Are you want to go this site'.tr, titleStyle: AppStyle.title, middleText: '', content: IconButton( onPressed: () { textToSpeechController .speakText('Are you want to go this site'.tr); }, icon: const Icon( Icons.headphones, size: 45, ), ), confirm: MyElevatedButton( title: 'Yes'.tr, onPressed: () async { await controller.getLocation(); await controller.getMap( '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', '${controller.recentPlaces[index]['latitude']},${controller.recentPlaces[index]['longitude']}', ); // controller.changePickerShown(); controller.showBottomSheet1(); // controller.showBottomSheet1(); Get.back(); }, )); }, child: Container( decoration: AppStyle.boxDecoration1, child: Padding( padding: const EdgeInsets.all(2), child: Text( controller.recentPlaces[index]['name'], style: AppStyle.title, ), ), ), ); }, ), ); } TextButton clickPointPosition( MapPassengerController controller, BuildContext context) { return TextButton( onPressed: () async { controller.clearPolyline(); controller.data = []; if (controller.passengerStartLocationFromMap == true) { controller.newMyLocation = controller.newStartPointLocation; controller.changeMainBottomMenuMap(); await controller.getMap( '${controller.newStartPointLocation.latitude},${controller.newStartPointLocation.longitude}', '${controller.myDestination.latitude},${controller.myDestination.longitude}', ); controller.currentLocationToFormPlaces = false; controller.placesDestination = []; // controller.isCancelRidePageShown = true; controller.clearPlacesStart(); controller.clearPlacesDestination(); controller.passengerStartLocationFromMap = false; controller.isPickerShown = false; // controller.showBottomSheet1(); // Get.back(); controller.showBottomSheet1(); // controller.hintTextStartPoint = // '${controller.newStartPointLocation.latitude.toStringAsFixed(4)} , ${controller.newStartPointLocation.longitude.toStringAsFixed(4)}'; } else if (controller.startLocationFromMap == true) { controller.newMyLocation = controller.newStartPointLocation; controller.hintTextStartPoint = '${controller.newStartPointLocation.latitude.toStringAsFixed(4)} , ${controller.newStartPointLocation.longitude.toStringAsFixed(4)}'; controller.startLocationFromMap = false; controller.isPickerShown = false; } else if (controller.workLocationFromMap == true) { controller.hintTextDestinationPoint = 'To Work'.tr; box.write(BoxName.addWork, '${controller.newMyLocation.latitude.toStringAsFixed(4)} , ${controller.newMyLocation.longitude.toStringAsFixed(4)}'); controller.newMyLocation = controller.newMyLocation; controller.isPickerShown = false; controller.workLocationFromMap = false; Get.snackbar('Work Saved'.tr, '', backgroundColor: AppColor.greenColor); } else if (controller.homeLocationFromMap == true) { controller.hintTextDestinationPoint = 'To Home'.tr; box.write(BoxName.addHome, '${controller.newMyLocation.latitude.toStringAsFixed(4)} , ${controller.newMyLocation.longitude.toStringAsFixed(4)}'); controller.newMyLocation = controller.newMyLocation; controller.isPickerShown = false; controller.homeLocationFromMap = false; controller.update(); Get.snackbar('Home Saved'.tr, '', backgroundColor: AppColor.greenColor); } else { controller.hintTextDestinationPoint = '${controller.newMyLocation.latitude.toStringAsFixed(4)} , ${controller.newMyLocation.longitude.toStringAsFixed(4)}'; controller.myDestination = controller.newMyLocation; controller.isPickerShown = false; controller.changeMainBottomMenuMap(); controller.passengerStartLocationFromMap = true; controller.isPickerShown = true; await controller.mapController?.animateCamera(CameraUpdate.newLatLng( LatLng(controller.passengerLocation.latitude, controller.passengerLocation.longitude))); Get.defaultDialog( title: 'Destination selected'.tr, titleStyle: AppStyle.title, content: Text( 'Now select start pick'.tr, style: AppStyle.title, ), confirm: MyElevatedButton( title: 'OK'.tr, onPressed: () { Get.back(); })); } controller.placesDestination = []; controller.placeDestinationController.clear(); controller.showBottomSheet1(); // Get.back(); // controller.showBottomSheet1(); controller.changeMainBottomMenuMap(); }, child: Row( children: [ IconButton( onPressed: () { controller.changeMainBottomMenuMap(); }, icon: controller.isMainBottomMenuMap ? const Icon( Icons.arrow_circle_up_rounded, size: 35, ) : const Icon( Icons.arrow_circle_down_rounded, size: 35, ), ), Text( controller.passengerStartLocationFromMap ? 'Pick your ride location on the map - Tap to confirm'.tr : "Click here point".tr, style: AppStyle.title, ), ], ), ); } Row whereWidgetsmall(MapPassengerController controller) { return Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ IconButton( onPressed: () { controller.changeMainBottomMenuMap(); }, icon: controller.isMainBottomMenuMap ? const Icon( Icons.ads_click, size: 35, ) : const Icon( Icons.arrow_circle_down_rounded, size: 35, ), ), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( height: 30, child: Text('${'Where to'.tr} ${box.read(BoxName.name)}')), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ controller.noCarString == false ? Text('Nearest Car for you about '.tr) : Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), color: AppColor.redColor, ), child: Padding( padding: const EdgeInsets.all(6), child: Text( 'No Car in your site. Sorry!'.tr, style: AppStyle.title .copyWith(color: AppColor.secondaryColor), ), ), ), controller.noCarString == false ? Container( decoration: BoxDecoration( border: Border.all(color: AppColor.redColor, width: 3)), child: Padding( padding: const EdgeInsets.all(4), child: Text((controller.nearestCar != null ? controller.nearestDistance.toStringAsFixed(0) : 'N/A')), ), ) : const SizedBox(), ], ) ], ), ], ); } } class FavioratePlacesDialogu extends StatelessWidget { const FavioratePlacesDialogu({ super.key, }); @override Widget build(BuildContext context) { Get.put(MapPassengerController()); return GetBuilder( builder: (controller) => DefaultTextStyle( style: AppStyle.title, child: Center( child: InkWell( onTap: () async { List favoritePlaces = await sql.getAllData(TableName.placesFavorite); // print(favoritePlaces); Get.defaultDialog( title: 'Favorite Places'.tr, content: SizedBox( width: Get.width * .8, height: 300, child: favoritePlaces.isEmpty ? Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon( Icons.hourglass_empty_rounded, size: 99, color: AppColor.primaryColor, ), Text( 'You Dont Have Any places yet !'.tr, style: AppStyle.title, ), ], ), ) : ListView.builder( itemCount: favoritePlaces.length, itemBuilder: (BuildContext context, int index) { return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ TextButton( onPressed: () async { Get.back(); await controller.getLocation(); await controller.getMap( '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}', '${favoritePlaces[index]['latitude']},${favoritePlaces[index]['longitude']}', ); // controller.changePickerShown(); controller.showBottomSheet1(); controller.showBottomSheet1(); }, child: Text( favoritePlaces[index]['name'], style: AppStyle.title, ), ), IconButton( onPressed: () async { await sql.deleteData( TableName.placesFavorite, favoritePlaces[index]['id']); Get.back(); // ignore: use_build_context_synchronously Toast.show( context, '${'You are Delete'.tr} ${favoritePlaces[index]['name']} from your list', AppColor.redColor); // Get.snackbar('Deleted'.tr, // '${'You are Delete'.tr} ${favoritePlaces[index]['name']} from your list', // backgroundColor: // AppColor.accentColor); }, icon: const Icon(Icons.favorite_outlined), ), ], ); }, ), ), cancel: MyElevatedButton( title: 'Back'.tr, onPressed: () => Get.back()), ); }, child: Text( '\u{1F3D8} ' 'Favorite Places'.tr, style: AppStyle.title, ), )), )); } }