This commit is contained in:
Hamza-Ayed
2024-09-08 10:31:59 +03:00
parent 2098aeda23
commit a40c6851ee
16 changed files with 812 additions and 187 deletions

View File

@@ -5,6 +5,7 @@ import 'package:SEFER/main.dart';
import 'package:SEFER/views/home/profile/passenger_profile_page.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/my_dialog.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -45,29 +46,47 @@ List<CarType> carTypes = [
image: 'assets/images/lady.png',
),
CarType(
carType: 'Delivery',
carDetail: 'Delivery service'.tr,
carType: 'Scooter',
carDetail: 'Scooter service'.tr,
image: 'assets/images/moto.png',
),
CarType(
carType: 'Mashwari',
carDetail: 'Mashwari without end point'.tr,
carType: 'Mishwar Vip',
carDetail: 'Mishwar Vip without end point'.tr,
image: 'assets/images/freeRide.png',
),
CarType(
carType: 'Rayeh Gai',
carDetail: "Best choice for cities".tr,
image: 'assets/images/roundtrip.png',
),
];
class CarDetailsTypeToChoose extends StatelessWidget {
CarDetailsTypeToChoose({super.key});
final textToSpeechController = Get.put(TextToSpeechController());
@override
Widget build(BuildContext context) {
return GetBuilder<MapPassengerController>(
builder: (mapPassengerController) {
// Add a new CarType if the distance condition is met and the list has fewer than 6 items
if (mapPassengerController.distance > 40) {
carTypes.add(
CarType(
carType: 'Rayeh Gai',
carDetail: "Best choice for cities".tr,
image: 'assets/images/roundtrip.png',
),
);
if (carTypes.length > 7) {
carTypes.removeRange(7, carTypes.length);
}
} // Create a Set to remove duplicates based on the `carType` field
else if (carTypes.length > 6) {
carTypes.removeRange(6, carTypes.length);
}
Set<CarType> uniqueCarTypes = {};
uniqueCarTypes.addAll(carTypes);
// Convert the Set back to a List
carTypes = uniqueCarTypes.toList();
return mapPassengerController.data.isNotEmpty &&
mapPassengerController.isBottomSheetShown &&
mapPassengerController.rideConfirm == false
@@ -142,9 +161,9 @@ class CarDetailsTypeToChoose extends StatelessWidget {
? mapPassengerController
.totalPassengerBalash
.toStringAsFixed(2)
: carType.carType == 'Delivery'
: carType.carType == 'Scooter'
? mapPassengerController
.totalPassengerMotoDelivery
.totalPassengerScooter
.toStringAsFixed(2)
: carType.carType == 'Lady'
? mapPassengerController
@@ -153,7 +172,7 @@ class CarDetailsTypeToChoose extends StatelessWidget {
: carType.carType ==
'Rayeh Gai'
? mapPassengerController
.totalPassengerRayehGai
.totalPassengerRayehGaiBalash
.toStringAsFixed(
2)
: '50',
@@ -231,7 +250,7 @@ class CarDetailsTypeToChoose extends StatelessWidget {
: carType.carType == 'Balash' &&
(mapPassengerController
.totalPassengerBalash >
15)
20)
? Row(
children: [
Container(
@@ -400,19 +419,19 @@ class CarDetailsTypeToChoose extends StatelessWidget {
} else if (mapPassengerController
.selectedIndex ==
4) {
box.write(BoxName.carType, 'Delivery');
box.write(BoxName.carType, 'Scooter');
mapPassengerController.totalPassenger =
mapPassengerController
.totalPassengerMotoDelivery;
.totalPassengerScooter;
Get.defaultDialog(
title: 'Delivery'.tr,
title: 'Scooter'.tr,
titleStyle: AppStyle.title,
content: CarDialogue(
textToSpeechController:
textToSpeechController,
image: 'assets/images/moto.png',
text:
'This is for delivery or a motorcycle.'
'This is for Scooter or a motorcycle.'
.tr),
confirm: MyElevatedButton(
kolor: AppColor.greenColor,
@@ -434,17 +453,17 @@ class CarDetailsTypeToChoose extends StatelessWidget {
} else if (mapPassengerController
.selectedIndex ==
5) {
box.write(BoxName.carType, 'Mashwari');
box.write(BoxName.carType, 'Mishwar Vip');
mapPassengerController.totalPassenger = 50;
Get.defaultDialog(
title: 'Mashwari'.tr,
title: 'Mishwar Vip'.tr,
titleStyle: AppStyle.title,
content: CarDialogue(
textToSpeechController:
textToSpeechController,
image: 'assets/images/freeRide.png',
text:
'Perfect for adventure seekers who want to experience something new and exciting'
'A trip with a prior reservation, allowing you to choose the best captains and cars.'
.tr),
confirm: MyElevatedButton(
kolor: AppColor.greenColor,
@@ -541,29 +560,175 @@ class CarDetailsTypeToChoose extends StatelessWidget {
.selectedIndex ==
6) {
box.write(BoxName.carType, 'Rayeh Gai');
mapPassengerController.totalPassenger =
mapPassengerController.totalPassengerLady;
// mapPassengerController.totalPassenger =
// mapPassengerController.totalPassengerRayehGai;
Get.defaultDialog(
title: 'Rayeh Gai'.tr,
titleStyle: AppStyle.title,
content: CarDialogue(
textToSpeechController:
textToSpeechController,
image: 'assets/images/roundtrip.png',
text:
"Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable."
.tr),
confirm: MyElevatedButton(
kolor: AppColor.greenColor,
title: 'Next'.tr,
onPressed: () {
Get.back();
mapPassengerController
.isBottomSheetShown = false;
mapPassengerController.update();
mapPassengerController
.changeCashConfirmPageShown();
}),
content: Column(
children: [
CarDialogue(
textToSpeechController:
textToSpeechController,
image:
'assets/images/roundtrip.png',
text:
"Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable."
.tr),
const SizedBox(
height: 16,
),
Container(
decoration: AppStyle.boxDecoration,
child: Padding(
padding:
const EdgeInsets.all(8.0),
child: Text(
'Choose between those Type Cars'
.tr),
),
),
const SizedBox(
height: 16,
),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceAround,
children: [
Container(
decoration:
AppStyle.boxDecoration,
child: InkWell(
onTap: () {
box.write(BoxName.carType,
'RayehGaiComfort');
mapPassengerController
.totalPassenger =
mapPassengerController
.totalPassengerRayehGaiComfort;
Get.back();
mapPassengerController
.isBottomSheetShown =
false;
mapPassengerController
.update();
mapPassengerController
.changeCashConfirmPageShown();
},
child: Padding(
padding:
const EdgeInsets.all(
8.0),
child: Column(
children: [
Text('Comfort'.tr),
Text(mapPassengerController
.totalPassengerRayehGaiComfort
.toString() +
r'$'),
],
),
),
)),
const SizedBox(
width: 10,
),
Container(
decoration:
AppStyle.boxDecoration,
child: InkWell(
onTap: () {
box.write(BoxName.carType,
'Speed');
mapPassengerController
.totalPassenger =
mapPassengerController
.totalPassengerRayehGai;
Get.back();
mapPassengerController
.isBottomSheetShown =
false;
mapPassengerController
.update();
mapPassengerController
.changeCashConfirmPageShown();
},
child: Padding(
padding:
const EdgeInsets.all(
8.0),
child: Column(
children: [
Text('Speed'.tr),
Text(mapPassengerController
.totalPassengerRayehGai
.toString() +
r'$'),
],
),
),
),
),
const SizedBox(
width: 10,
),
Container(
decoration:
AppStyle.boxDecoration,
child: InkWell(
onTap: () {
box.write(BoxName.carType,
'Balash');
mapPassengerController
.totalPassenger =
mapPassengerController
.totalPassengerRayehGaiBalash;
Get.back();
mapPassengerController
.isBottomSheetShown =
false;
mapPassengerController
.update();
mapPassengerController
.changeCashConfirmPageShown();
},
child: Padding(
padding:
const EdgeInsets.all(
8.0),
child: Column(
children: [
Text('Balash'.tr),
Text(mapPassengerController
.totalPassengerRayehGaiBalash
.toString() +
r'$'),
],
),
),
),
),
],
),
const SizedBox(
height: 16,
),
const SizedBox(
height: 16,
),
],
),
// confirm: MyElevatedButton(
// kolor: AppColor.greenColor,
// title: 'Next'.tr,
// onPressed: () {
// Get.back();
// mapPassengerController
// .isBottomSheetShown = false;
// mapPassengerController.update();
// mapPassengerController
// .changeCashConfirmPageShown();
// }),
cancel: MyElevatedButton(
title: 'Cancel'.tr,
kolor: AppColor.redColor,
@@ -588,6 +753,111 @@ class CarDetailsTypeToChoose extends StatelessWidget {
// ;
});
}
Future<dynamic> comfortDialougRayehgai(
MapPassengerController mapPassengerController) {
return Get.defaultDialog(
title: 'Comfort'.tr,
content: GetBuilder<MapPassengerController>(
builder: (mapPassengerController) {
return Column(
children: [
SizedBox(height: 60, child: HourPickerExample()),
const SizedBox(
height: 16,
),
SizedBox(
height: 30,
child: Text(box.read(BoxName.hourWait).toString() + 'hour'.tr ??
'1${'hour'.tr}'),
),
],
);
}),
confirm: MyElevatedButton(
kolor: AppColor.greenColor,
title: 'Next'.tr,
onPressed: () {
Get.back();
mapPassengerController.isBottomSheetShown = false;
mapPassengerController.update();
mapPassengerController.changeCashConfirmPageShown();
}),
cancel: MyElevatedButton(
title: 'Cancel'.tr,
kolor: AppColor.redColor,
onPressed: () {
Get.back();
}));
}
Future<dynamic> speedDialougRayehGai(
MapPassengerController mapPassengerController) {
return Get.defaultDialog(
title: 'Speed'.tr,
content: Column(
children: [
SizedBox(height: 60, child: HourPickerExample()),
const SizedBox(
height: 16,
),
SizedBox(
height: 30,
child: Text(box.read(BoxName.hourWait).toString() + 'hour'.tr ??
'1${'hour'.tr}'),
),
],
),
confirm: MyElevatedButton(
kolor: AppColor.greenColor,
title: 'Next'.tr,
onPressed: () {
Get.back();
mapPassengerController.isBottomSheetShown = false;
mapPassengerController.update();
mapPassengerController.changeCashConfirmPageShown();
}),
cancel: MyElevatedButton(
title: 'Cancel'.tr,
kolor: AppColor.redColor,
onPressed: () {
Get.back();
}));
}
Future<dynamic> balashDialougRayehGai(
MapPassengerController mapPassengerController) {
return Get.defaultDialog(
title: 'Balash'.tr,
content: Column(
children: [
SizedBox(height: 60, child: HourPickerExample()),
const SizedBox(
height: 16,
),
SizedBox(
height: 30,
child: Text(box.read(BoxName.hourWait).toString() + 'hour'.tr ??
'1${'hour'.tr}'),
),
],
),
confirm: MyElevatedButton(
kolor: AppColor.greenColor,
title: 'Next'.tr,
onPressed: () {
Get.back();
mapPassengerController.isBottomSheetShown = false;
mapPassengerController.update();
mapPassengerController.changeCashConfirmPageShown();
}),
cancel: MyElevatedButton(
title: 'Cancel'.tr,
kolor: AppColor.redColor,
onPressed: () {
Get.back();
}));
}
}
class BurcMoney extends StatelessWidget {
@@ -805,3 +1075,72 @@ class CarDialogue extends StatelessWidget {
);
}
}
class HourPickerExample extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () async {
int? selectedHour = await showCupertinoModalPopup<int>(
context: context,
builder: (BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 200,
color: Colors.white,
child: Column(
children: [
CupertinoButton(
child: Text('Done'.tr),
onPressed: () {
Navigator.of(context).pop();
},
),
SizedBox(
height: 140,
child: CupertinoPicker(
itemExtent: 32.0,
onSelectedItemChanged: (int index) {
// Handle the selection
box.write(BoxName.hourWait, index);
// Navigator.pop(context, index + 1);
},
children: List<Widget>.generate(5, (int index) {
return Center(
child: Text('${index + 1} ${'hour'.tr}'),
);
}),
),
),
],
),
),
);
},
);
if (selectedHour != null) {
// Do something with the selected hour
print('Selected hour: $selectedHour');
}
},
child: Container(
// height: 70,
decoration: BoxDecoration(
border: Border.all(
color: AppColor.blueColor,
width: 3,
),
borderRadius: BorderRadius.circular(12)),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'How many hours would you like to wait?'.tr,
style: TextStyle(fontSize: 18),
),
),
),
);
}
}

View File

@@ -338,7 +338,7 @@ class MainBottomMenuMap extends StatelessWidget {
title: 'Yes'.tr,
onPressed: () async {
Get.back();
await controller.getLocation();
controller.getLocation();
await controller.getMap(
'${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
'${controller.recentPlaces[index]['latitude']},${controller.recentPlaces[index]['longitude']}',
@@ -606,7 +606,7 @@ class FaviouratePlacesDialog extends StatelessWidget {
TextButton(
onPressed: () async {
Get.back();
await controller.getLocation();
controller.getLocation();
await controller.getMap(
'${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
'${favoritePlaces[index]['latitude']},${favoritePlaces[index]['longitude']}',

View File

@@ -1,12 +1,14 @@
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/map_passenger_controller.dart';
import 'package:SEFER/env/env.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../constant/api_key.dart';
import '../../../print.dart';
class CupertinoDriverListWidget extends StatelessWidget {
MapPassengerController mapPassengerController =
@@ -30,7 +32,7 @@ class CupertinoDriverListWidget extends StatelessWidget {
leading: CircleAvatar(
radius: 25,
backgroundImage: NetworkImage(
'${AK.serverPHP}/portrate_captain_image/${driver['id']}.jpg',
'${Env.seferCairoServer}/portrate_captain_image/${driver['id']}.jpg',
),
backgroundColor: CupertinoColors.systemGrey5,
),
@@ -138,6 +140,7 @@ class CupertinoDriverListWidget extends StatelessWidget {
onPressed: () {
Get.back();
showDateTimePickerDialog(driver);
Log.print('driver: ${driver}');
}));
print('${'Selected driver'.tr}: ${driver['NAME']}');
// Get.back(); // Close the dialog
@@ -150,9 +153,18 @@ class CupertinoDriverListWidget extends StatelessWidget {
}
Color hexToColor(String hexColor) {
if (hexColor == null || hexColor.isEmpty || hexColor == 'null') {
// Return a default color if the hex color is invalid
return Colors.grey;
}
hexColor = hexColor.replaceAll("#", "");
String colorString = "ff$hexColor";
return Color(int.parse(colorString, radix: 16));
if (hexColor.length == 6) {
hexColor = "ff$hexColor";
} else if (hexColor.length != 8) {
// Return a default color if the hex color is not in the valid format
return Colors.grey;
}
return Color(int.parse(hexColor, radix: 16));
}
void showDriverSelectionDialog(Map<String, dynamic> driver) {
@@ -192,7 +204,23 @@ class CupertinoDriverListWidget extends StatelessWidget {
);
}
Future<void> confirmTripData(
Map<String, dynamic> driver, DateTime selectedDateTime) async {
try {
// Save trip data and set up notifications
// Log.print('selectedDateTime: $selectedDateTime');
// Log.print('driver: $driver');
await mapPassengerController.saveTripData(driver, selectedDateTime);
Get.back(); // Close the dialog
} catch (e) {
// Handle any errors that occur during the save process
Log.print('Error saving trip data: $e');
Get.snackbar('Error', 'Failed to save trip data');
}
}
void showDateTimePickerDialog(Map<String, dynamic> driver) {
Log.print('driver: ${driver}');
DateTime selectedDateTime = DateTime.now();
Get.defaultDialog(
@@ -209,12 +237,10 @@ class CupertinoDriverListWidget extends StatelessWidget {
),
confirm: MyElevatedButton(
title: 'Confirm Trip'.tr,
onPressed: () async {
onPressed: () {
DateTime selectedDateTime =
mapPassengerController.selectedDateTime.value;
// Save trip data and set up notifications
Get.back();
await mapPassengerController.saveTripData(driver, selectedDateTime);
confirmTripData(driver, selectedDateTime);
},
),
);