9/8/1
This commit is contained in:
2
.env
2
.env
@@ -20,7 +20,7 @@ seferPaymentServer=https://seferpw.shop/sefer
|
|||||||
seferCairoServer=https://sefer.click/sefer
|
seferCairoServer=https://sefer.click/sefer
|
||||||
seferGizaServer=https://sefergiza.site/sefer
|
seferGizaServer=https://sefergiza.site/sefer
|
||||||
whatappID=369939736211879
|
whatappID=369939736211879
|
||||||
whatsapp=EAAOtbZBSUK74BO6yE1QwIBsRCjPDANdum66xap0ZA7OZA8LqEu8MZAts1kwr12eRiNXtvpJ2ZAFSY5dw3KVSyrUuH8boLjynxdFI4Gh1Q7BCHx275X2uZBwKWZCSrsVN17i6mZAFNYYd25sQv0ZBomeTk02ZCIJot4UqWxK9ZBvxsq1k2yS7lD2NsjZB5EHbpaYGLzxFJ2FCCSX6iHyKXab6ckfK7m19wo77in7Dl3YZD
|
whatsapp=EEAAOtbZBSUK74BO93qYEsBTetiT5qGCHCdxDRXEH1cGUrlbHN2ZB4bVrFCR1ZC8xEVDtHeLUH6yHej2RPMpmoLD69AlqBJJDtQ7nrsmbeIRZCBGPoKueLQUaEMWPC2R6EJdZArqdFy1rv4ZAGJZBV9ifxvwwTAlw7dbzA3WEZBvWKPXswUkPP9UWM1fWEPL86buyH0IvEd6j9grk6l7rG6CAZD
|
||||||
cohere=Aulwd8y5SPWos0hJhG0toUf8gOhUUrpf5Q2TPmVGXrXlBl
|
cohere=Aulwd8y5SPWos0hJhG0toUf8gOhUUrpf5Q2TPmVGXrXlBl
|
||||||
claudeAiAPI=zg-qbc-qvo39-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl
|
claudeAiAPI=zg-qbc-qvo39-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl
|
||||||
payPalClientId=QALymfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl
|
payPalClientId=QALymfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl
|
||||||
|
|||||||
@@ -37,11 +37,11 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>48</string>
|
<string>49</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>4.3.47</string>
|
<string>4.3.49</string>
|
||||||
<key>FirebaseAppDelegateProxyEnabled</key>
|
<key>FirebaseAppDelegateProxyEnabled</key>
|
||||||
<string>NO</string>
|
<string>NO</string>
|
||||||
<key>GMSApiKey</key>
|
<key>GMSApiKey</key>
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ class BoxName {
|
|||||||
static const String vin = "vin";
|
static const String vin = "vin";
|
||||||
static const String isvibrate = "isvibrate";
|
static const String isvibrate = "isvibrate";
|
||||||
static const String make = "make";
|
static const String make = "make";
|
||||||
|
static const String hourWait = "hourWait";
|
||||||
static const String model = "model";
|
static const String model = "model";
|
||||||
static const String year = "year";
|
static const String year = "year";
|
||||||
static const String expirationDate = "expirationDate";
|
static const String expirationDate = "expirationDate";
|
||||||
|
|||||||
@@ -330,6 +330,33 @@ class FirebaseMessagesController extends GetxController {
|
|||||||
'We regret to inform you that another driver has accepted this order.'
|
'We regret to inform you that another driver has accepted this order.'
|
||||||
.tr,
|
.tr,
|
||||||
'order');
|
'order');
|
||||||
|
} else if (message.notification!.title! == 'VIP Order Accepted'.tr) {
|
||||||
|
var myListString = message.data['passengerList'];
|
||||||
|
var driverList = jsonDecode(myListString) as List<dynamic>;
|
||||||
|
|
||||||
|
// Assuming driverList[1] contains a valid date string
|
||||||
|
DateTime scheduledTime;
|
||||||
|
try {
|
||||||
|
scheduledTime = DateTime.parse(driverList[1]);
|
||||||
|
} catch (e) {
|
||||||
|
// Handle the error if the date format is incorrect
|
||||||
|
Log.print('Error parsing date: $e');
|
||||||
|
scheduledTime = DateTime.now()
|
||||||
|
.add(const Duration(hours: 1)); // Fallback to 1 hour from now
|
||||||
|
}
|
||||||
|
|
||||||
|
NotificationController()
|
||||||
|
.showNotification('The driver accepted your trip'.tr, '', 'order');
|
||||||
|
|
||||||
|
MyDialog().getDialog(
|
||||||
|
'VIP Order Accepted'.tr,
|
||||||
|
'The driver accepted your trip'.tr,
|
||||||
|
() {
|
||||||
|
// Schedule a notification for the parsed date or fallback date
|
||||||
|
NotificationController().scheduleNotification('VIP Order'.tr,
|
||||||
|
'This is a scheduled notification.'.tr, scheduledTime);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,19 @@
|
|||||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:timezone/data/latest.dart' as tz;
|
||||||
|
import 'package:timezone/timezone.dart' as tz;
|
||||||
|
|
||||||
class NotificationController extends GetxController {
|
class NotificationController extends GetxController {
|
||||||
final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin =
|
final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin =
|
||||||
FlutterLocalNotificationsPlugin();
|
FlutterLocalNotificationsPlugin();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onInit() {
|
||||||
|
super.onInit();
|
||||||
|
initNotifications();
|
||||||
|
tz.initializeTimeZones();
|
||||||
|
}
|
||||||
|
|
||||||
// Initializes the local notifications plugin
|
// Initializes the local notifications plugin
|
||||||
Future<void> initNotifications() async {
|
Future<void> initNotifications() async {
|
||||||
const AndroidInitializationSettings android =
|
const AndroidInitializationSettings android =
|
||||||
@@ -26,4 +35,29 @@ class NotificationController extends GetxController {
|
|||||||
NotificationDetails details = NotificationDetails(android: android);
|
NotificationDetails details = NotificationDetails(android: android);
|
||||||
await _flutterLocalNotificationsPlugin.show(0, title, message, details);
|
await _flutterLocalNotificationsPlugin.show(0, title, message, details);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Schedules a notification for a specific time
|
||||||
|
Future<void> scheduleNotification(
|
||||||
|
String title, String body, DateTime scheduledTime) async {
|
||||||
|
await _flutterLocalNotificationsPlugin.zonedSchedule(
|
||||||
|
0,
|
||||||
|
title,
|
||||||
|
body,
|
||||||
|
tz.TZDateTime.from(scheduledTime, tz.local),
|
||||||
|
const NotificationDetails(
|
||||||
|
android: AndroidNotificationDetails(
|
||||||
|
'your_channel_id',
|
||||||
|
'your_channel_name',
|
||||||
|
channelDescription: 'your_channel_description',
|
||||||
|
importance: Importance.max,
|
||||||
|
priority: Priority.high,
|
||||||
|
showWhen: false,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
androidAllowWhileIdle: true,
|
||||||
|
uiLocalNotificationDateInterpretation:
|
||||||
|
UILocalNotificationDateInterpretation.absoluteTime,
|
||||||
|
matchDateTimeComponents: DateTimeComponents.time,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,9 +28,9 @@ class CRUD {
|
|||||||
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}',
|
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}',
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
Log.print('payload: ${payload}');
|
// Log.print('payload: ${payload}');
|
||||||
Log.print('response.request: ${response.request}');
|
Log.print('response.request: ${response.request}');
|
||||||
Log.print('response.reasonPhrase: ${response.reasonPhrase}');
|
// Log.print('response.reasonPhrase: ${response.reasonPhrase}');
|
||||||
|
|
||||||
Log.print('response.body: ${response.body}');
|
Log.print('response.body: ${response.body}');
|
||||||
// print(payload);
|
// print(payload);
|
||||||
@@ -233,8 +233,8 @@ class CRUD {
|
|||||||
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}',
|
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}',
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
Log.print('payload: ${payload}');
|
// Log.print('payload: ${payload}');
|
||||||
Log.print('response.request: ${response.request}');
|
// Log.print('response.request: ${response.request}');
|
||||||
Log.print('response.body: ${response.body}');
|
Log.print('response.body: ${response.body}');
|
||||||
var jsonData = jsonDecode(response.body);
|
var jsonData = jsonDecode(response.body);
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
|
|||||||
@@ -64,6 +64,11 @@ void showUpdateDialog(BuildContext context) {
|
|||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
CupertinoDialogAction(
|
||||||
|
child: Text('Cancel'.tr),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
})
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ class MapPassengerController extends GetxController {
|
|||||||
late double totalPassengerSpeedDiscount = 0;
|
late double totalPassengerSpeedDiscount = 0;
|
||||||
late double totalPassengerBalashDiscount = 0;
|
late double totalPassengerBalashDiscount = 0;
|
||||||
late double totalPassengerRaihGaiDiscount = 0;
|
late double totalPassengerRaihGaiDiscount = 0;
|
||||||
late double totalPassengerMotoDelivery = 0;
|
late double totalPassengerScooter = 0;
|
||||||
late double totalDriver = 0;
|
late double totalDriver = 0;
|
||||||
late double averageDuration = 0;
|
late double averageDuration = 0;
|
||||||
late double costDuration = 0;
|
late double costDuration = 0;
|
||||||
@@ -258,7 +258,7 @@ class MapPassengerController extends GetxController {
|
|||||||
void getCurrentLocationFormString() async {
|
void getCurrentLocationFormString() async {
|
||||||
currentLocationToFormPlaces = true;
|
currentLocationToFormPlaces = true;
|
||||||
currentLocationString = 'Waiting for your location'.tr;
|
currentLocationString = 'Waiting for your location'.tr;
|
||||||
await getLocation();
|
getLocation();
|
||||||
currentLocationString = passengerLocation.toString();
|
currentLocationString = passengerLocation.toString();
|
||||||
newStartPointLocation = passengerLocation;
|
newStartPointLocation = passengerLocation;
|
||||||
update();
|
update();
|
||||||
@@ -1760,7 +1760,7 @@ class MapPassengerController extends GetxController {
|
|||||||
'northeastLon': bounds.northeast.longitude.toString(),
|
'northeastLon': bounds.northeast.longitude.toString(),
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 'Delivery':
|
case 'Scooter':
|
||||||
res = await CRUD()
|
res = await CRUD()
|
||||||
.get(link: AppLink.getCarsLocationByPassengerDelivery, payload: {
|
.get(link: AppLink.getCarsLocationByPassengerDelivery, payload: {
|
||||||
'southwestLat': bounds.southwest.latitude.toString(),
|
'southwestLat': bounds.southwest.latitude.toString(),
|
||||||
@@ -2603,44 +2603,58 @@ class MapPassengerController extends GetxController {
|
|||||||
Future<void> getLocation() async {
|
Future<void> getLocation() async {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
update();
|
update();
|
||||||
bool serviceEnabled;
|
|
||||||
PermissionStatus permissionGranted;
|
try {
|
||||||
// dialoge();
|
// Perform permission and service checks in parallel
|
||||||
// Check if location services are enabled
|
final results = await Future.wait([
|
||||||
serviceEnabled = await location.serviceEnabled();
|
location.serviceEnabled(),
|
||||||
if (!serviceEnabled) {
|
location.hasPermission(),
|
||||||
serviceEnabled = await location.requestService();
|
]);
|
||||||
|
|
||||||
|
bool serviceEnabled = results[0] as bool; // Cast to bool
|
||||||
|
PermissionStatus permissionGranted =
|
||||||
|
results[1] as PermissionStatus; // Cast to PermissionStatus
|
||||||
|
|
||||||
|
// Check if location services are enabled
|
||||||
if (!serviceEnabled) {
|
if (!serviceEnabled) {
|
||||||
// Location services are still not enabled, handle the error
|
serviceEnabled = await location.requestService();
|
||||||
return;
|
if (!serviceEnabled) {
|
||||||
|
// Location services are still not enabled, handle the error
|
||||||
|
isLoading = false;
|
||||||
|
update();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the app has permission to access location
|
// Check if the app has permission to access location
|
||||||
permissionGranted = await location.hasPermission();
|
if (permissionGranted == PermissionStatus.denied) {
|
||||||
if (permissionGranted == PermissionStatus.denied) {
|
permissionGranted = await location.requestPermission();
|
||||||
permissionGranted = await location.requestPermission();
|
if (permissionGranted != PermissionStatus.granted) {
|
||||||
if (permissionGranted != PermissionStatus.granted) {
|
// Location permission is still not granted, handle the error
|
||||||
// Location permission is still not granted, handle the error
|
isLoading = false;
|
||||||
return;
|
update();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Request updated location with medium accuracy (faster)
|
||||||
|
LocationData _locationData = await location.getLocation();
|
||||||
|
passengerLocation =
|
||||||
|
LatLng(_locationData.latitude!, _locationData.longitude!);
|
||||||
|
|
||||||
|
// Process location data
|
||||||
|
getLocationArea(passengerLocation.latitude, passengerLocation.longitude);
|
||||||
|
newStartPointLocation = passengerLocation;
|
||||||
|
speed = _locationData.speed!;
|
||||||
|
|
||||||
|
// Update loading state
|
||||||
|
isLoading = false;
|
||||||
|
update();
|
||||||
|
} catch (e) {
|
||||||
|
// Handle exceptions (optional logging)
|
||||||
|
isLoading = false;
|
||||||
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure location accuracy
|
|
||||||
// LocationAccuracy desiredAccuracy = LocationAccuracy.high;
|
|
||||||
|
|
||||||
// Get the current location
|
|
||||||
LocationData _locationData = await location.getLocation();
|
|
||||||
passengerLocation =
|
|
||||||
(_locationData.latitude != null && _locationData.longitude != null
|
|
||||||
? LatLng(_locationData.latitude!, _locationData.longitude!)
|
|
||||||
: null)!;
|
|
||||||
getLocationArea(passengerLocation.latitude, passengerLocation.longitude);
|
|
||||||
newStartPointLocation = passengerLocation;
|
|
||||||
speed = _locationData.speed!;
|
|
||||||
// //print location details
|
|
||||||
isLoading = false;
|
|
||||||
update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LatLngBounds calculateBounds(
|
LatLngBounds calculateBounds(
|
||||||
@@ -2689,7 +2703,7 @@ class MapPassengerController extends GetxController {
|
|||||||
Log.print('AppLink.endPoint: ${AppLink.endPoint}');
|
Log.print('AppLink.endPoint: ${AppLink.endPoint}');
|
||||||
|
|
||||||
if (reloadStartApp == false) {
|
if (reloadStartApp == false) {
|
||||||
Timer.periodic(const Duration(seconds: 5), (timer) async {
|
Timer.periodic(const Duration(seconds: 4), (timer) async {
|
||||||
reloadCount++;
|
reloadCount++;
|
||||||
Log.print('reloadCount: ${reloadCount}');
|
Log.print('reloadCount: ${reloadCount}');
|
||||||
|
|
||||||
@@ -2762,7 +2776,7 @@ class MapPassengerController extends GetxController {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3195,7 +3209,7 @@ class MapPassengerController extends GetxController {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
int selectedIndex = -1; // Initialize with no selection
|
int selectedIndex = 1; // Initialize with no selection
|
||||||
void selectCarFromList(int index) {
|
void selectCarFromList(int index) {
|
||||||
selectedIndex = index; // Update selected index
|
selectedIndex = index; // Update selected index
|
||||||
carTypes.forEach(
|
carTypes.forEach(
|
||||||
@@ -3269,6 +3283,8 @@ class MapPassengerController extends GetxController {
|
|||||||
double totalPassengerBalash = 0;
|
double totalPassengerBalash = 0;
|
||||||
double totalPassengerLady = 0;
|
double totalPassengerLady = 0;
|
||||||
double totalPassengerRayehGai = 0;
|
double totalPassengerRayehGai = 0;
|
||||||
|
double totalPassengerRayehGaiComfort = 0;
|
||||||
|
double totalPassengerRayehGaiBalash = 0;
|
||||||
Future bottomSheet() async {
|
Future bottomSheet() async {
|
||||||
if (data.isNotEmpty) {
|
if (data.isNotEmpty) {
|
||||||
durationToAdd = Duration(seconds: durationToRide);
|
durationToAdd = Duration(seconds: durationToRide);
|
||||||
@@ -3285,7 +3301,9 @@ class MapPassengerController extends GetxController {
|
|||||||
costDelivery,
|
costDelivery,
|
||||||
costBalash,
|
costBalash,
|
||||||
costLady,
|
costLady,
|
||||||
costRayehGai = 0;
|
costRayehGai,
|
||||||
|
costRayehGaiBalash,
|
||||||
|
costRayehGaiComfort = 0;
|
||||||
update();
|
update();
|
||||||
if (startNameAddress.toLowerCase().contains('airport') ||
|
if (startNameAddress.toLowerCase().contains('airport') ||
|
||||||
endNameAddress.toLowerCase().contains('airport') ||
|
endNameAddress.toLowerCase().contains('airport') ||
|
||||||
@@ -3306,10 +3324,17 @@ class MapPassengerController extends GetxController {
|
|||||||
((distance * 1 * speedPrice) * .4) +
|
((distance * 1 * speedPrice) * .4) +
|
||||||
costDuration * 2 * latePrice +
|
costDuration * 2 * latePrice +
|
||||||
20;
|
20;
|
||||||
|
costRayehGaiComfort = (distance * 2 * comfortPrice) -
|
||||||
|
((distance * 1 * comfortPrice) * .4) +
|
||||||
|
costDuration * 2 * latePrice +
|
||||||
|
20;
|
||||||
|
costRayehGaiBalash = (distance * 2 * (speedPrice - 1)) -
|
||||||
|
((distance * 1 * (speedPrice - 1)) * .4) +
|
||||||
|
costDuration * 2 * latePrice +
|
||||||
|
20;
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
} else if (currentTime.hour >= 21 && currentTime.hour < 0) {
|
||||||
if (currentTime.hour >= 21 && currentTime.hour < 0) {
|
|
||||||
// costDistance = distance * latePrice;
|
// costDistance = distance * latePrice;
|
||||||
costComfort = (distance * comfortPrice) + costDuration * latePrice;
|
costComfort = (distance * comfortPrice) + costDuration * latePrice;
|
||||||
costSpeed = (distance * speedPrice) + costDuration * latePrice;
|
costSpeed = (distance * speedPrice) + costDuration * latePrice;
|
||||||
@@ -3319,6 +3344,12 @@ class MapPassengerController extends GetxController {
|
|||||||
costRayehGai = (distance * 2 * speedPrice) -
|
costRayehGai = (distance * 2 * speedPrice) -
|
||||||
((distance * 1 * speedPrice) * .4) +
|
((distance * 1 * speedPrice) * .4) +
|
||||||
costDuration * 2 * latePrice;
|
costDuration * 2 * latePrice;
|
||||||
|
costRayehGaiComfort = (distance * 2 * comfortPrice) -
|
||||||
|
((distance * 1 * comfortPrice) * .4) +
|
||||||
|
costDuration * 2 * latePrice;
|
||||||
|
costRayehGaiBalash = (distance * 2 * (speedPrice - 1)) -
|
||||||
|
((distance * 1 * (speedPrice - 1)) * .4) +
|
||||||
|
costDuration * 2 * latePrice;
|
||||||
|
|
||||||
update();
|
update();
|
||||||
} else if (currentTime.hour >= 1 && currentTime.hour < 5) {
|
} else if (currentTime.hour >= 1 && currentTime.hour < 5) {
|
||||||
@@ -3328,8 +3359,9 @@ class MapPassengerController extends GetxController {
|
|||||||
startNameAddress.contains('ديسكو') ||
|
startNameAddress.contains('ديسكو') ||
|
||||||
startNameAddress.contains('ملهى ليلي') ||
|
startNameAddress.contains('ملهى ليلي') ||
|
||||||
startNameAddress.contains('Night club')) {
|
startNameAddress.contains('Night club')) {
|
||||||
// Your code here costComfort =
|
// Your code here
|
||||||
(distance * comfortPrice) + costDuration * (latePrice + .5) * 2;
|
costComfort =
|
||||||
|
(distance * comfortPrice) + costDuration * (latePrice + .5) * 2;
|
||||||
costSpeed =
|
costSpeed =
|
||||||
(distance * speedPrice) + costDuration * (latePrice + .5) * 2;
|
(distance * speedPrice) + costDuration * (latePrice + .5) * 2;
|
||||||
costBalash = (distance * (speedPrice - 1)) +
|
costBalash = (distance * (speedPrice - 1)) +
|
||||||
@@ -3341,6 +3373,12 @@ class MapPassengerController extends GetxController {
|
|||||||
costRayehGai = (distance * 2 * speedPrice) -
|
costRayehGai = (distance * 2 * speedPrice) -
|
||||||
((distance * 1 * speedPrice) * .4) +
|
((distance * 1 * speedPrice) * .4) +
|
||||||
costDuration * 2 * (latePrice + .5) * 2;
|
costDuration * 2 * (latePrice + .5) * 2;
|
||||||
|
costRayehGaiComfort = (distance * 2 * comfortPrice) -
|
||||||
|
((distance * 1 * comfortPrice) * .4) +
|
||||||
|
costDuration * 2 * (latePrice + .5) * 2;
|
||||||
|
costRayehGaiBalash = (distance * 2 * (speedPrice - 1)) -
|
||||||
|
((distance * 1 * (speedPrice - 1)) * .4) +
|
||||||
|
costDuration * 2 * (latePrice + .5) * 2;
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
@@ -3356,9 +3394,15 @@ class MapPassengerController extends GetxController {
|
|||||||
costRayehGai = (distance * 2 * speedPrice) -
|
costRayehGai = (distance * 2 * speedPrice) -
|
||||||
((distance * 1 * speedPrice) * .4) +
|
((distance * 1 * speedPrice) * .4) +
|
||||||
costDuration * 2 * latePrice;
|
costDuration * 2 * latePrice;
|
||||||
|
costRayehGaiComfort = (distance * 2 * comfortPrice) -
|
||||||
|
((distance * 1 * comfortPrice) * .4) +
|
||||||
|
costDuration * 2 * latePrice;
|
||||||
|
costRayehGaiBalash = (distance * 2 * (speedPrice - 1)) -
|
||||||
|
((distance * 1 * (speedPrice - 1)) * .4) +
|
||||||
|
costDuration * 2 * latePrice;
|
||||||
|
|
||||||
update();
|
update();
|
||||||
} else if (currentTime.hour >= 13 && currentTime.hour <= 16) {
|
} else if (currentTime.hour >= 14 && currentTime.hour <= 17) {
|
||||||
// if (averageDuration > 2.5) {
|
// if (averageDuration > 2.5) {
|
||||||
// costDistance = distance * heavyPrice;
|
// costDistance = distance * heavyPrice;
|
||||||
costComfort = (distance * comfortPrice) + costDuration * heavyPrice;
|
costComfort = (distance * comfortPrice) + costDuration * heavyPrice;
|
||||||
@@ -3369,6 +3413,12 @@ class MapPassengerController extends GetxController {
|
|||||||
costRayehGai = (distance * 2 * speedPrice) -
|
costRayehGai = (distance * 2 * speedPrice) -
|
||||||
((distance * 1 * speedPrice) * .4) +
|
((distance * 1 * speedPrice) * .4) +
|
||||||
costDuration * 2 * heavyPrice;
|
costDuration * 2 * heavyPrice;
|
||||||
|
costRayehGaiComfort = (distance * 2 * comfortPrice) -
|
||||||
|
((distance * 1 * comfortPrice) * .4) +
|
||||||
|
costDuration * 2 * heavyPrice;
|
||||||
|
costRayehGaiBalash = (distance * 2 * (speedPrice - 1)) -
|
||||||
|
((distance * 1 * (speedPrice - 1)) * .4) +
|
||||||
|
costDuration * 2 * heavyPrice;
|
||||||
|
|
||||||
update();
|
update();
|
||||||
// } /
|
// } /
|
||||||
@@ -3382,6 +3432,12 @@ class MapPassengerController extends GetxController {
|
|||||||
costRayehGai = (distance * 2 * speedPrice) -
|
costRayehGai = (distance * 2 * speedPrice) -
|
||||||
((distance * 1 * speedPrice) * .4) +
|
((distance * 1 * speedPrice) * .4) +
|
||||||
costDuration * 2;
|
costDuration * 2;
|
||||||
|
costRayehGaiComfort = (distance * 2 * comfortPrice) -
|
||||||
|
((distance * 1 * comfortPrice) * .4) +
|
||||||
|
costDuration * 2;
|
||||||
|
costRayehGaiBalash = (distance * 2 * (speedPrice - 1)) -
|
||||||
|
((distance * 1 * (speedPrice - 1)) * .4) +
|
||||||
|
costDuration * 2;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3397,6 +3453,12 @@ class MapPassengerController extends GetxController {
|
|||||||
(costBalash + (costBalash * kazan / 100)).ceilToDouble();
|
(costBalash + (costBalash * kazan / 100)).ceilToDouble();
|
||||||
totalPassengerRayehGai =
|
totalPassengerRayehGai =
|
||||||
(costRayehGai + (costRayehGai * kazan / 100)).ceilToDouble();
|
(costRayehGai + (costRayehGai * kazan / 100)).ceilToDouble();
|
||||||
|
totalPassengerRayehGaiComfort =
|
||||||
|
(costRayehGaiComfort + (costRayehGaiComfort * kazan / 100))
|
||||||
|
.ceilToDouble();
|
||||||
|
totalPassengerRayehGaiBalash =
|
||||||
|
(costRayehGaiBalash + (costRayehGaiBalash * kazan / 100))
|
||||||
|
.ceilToDouble();
|
||||||
totalPassengerComfortDiscount =
|
totalPassengerComfortDiscount =
|
||||||
totalPassengerComfort + totalPassengerComfort * (kazan - 0) / 100;
|
totalPassengerComfort + totalPassengerComfort * (kazan - 0) / 100;
|
||||||
totalPassengerLadyDiscount =
|
totalPassengerLadyDiscount =
|
||||||
@@ -3407,7 +3469,7 @@ class MapPassengerController extends GetxController {
|
|||||||
totalPassengerBalash + totalPassengerBalash * (kazan) / 100;
|
totalPassengerBalash + totalPassengerBalash * (kazan) / 100;
|
||||||
totalPassengerRaihGaiDiscount =
|
totalPassengerRaihGaiDiscount =
|
||||||
totalPassengerRayehGai + totalPassengerRayehGai * (kazan) / 100;
|
totalPassengerRayehGai + totalPassengerRayehGai * (kazan) / 100;
|
||||||
totalPassengerMotoDelivery =
|
totalPassengerScooter =
|
||||||
(costDelivery + (costDelivery * kazan / 100)).ceilToDouble();
|
(costDelivery + (costDelivery * kazan / 100)).ceilToDouble();
|
||||||
totalPassengerComfort = totalPassengerComfortDiscount -
|
totalPassengerComfort = totalPassengerComfortDiscount -
|
||||||
(totalPassengerComfortDiscount * kazan / 100);
|
(totalPassengerComfortDiscount * kazan / 100);
|
||||||
@@ -3428,7 +3490,7 @@ class MapPassengerController extends GetxController {
|
|||||||
totalPassengerBalash = 20;
|
totalPassengerBalash = 20;
|
||||||
totalPassengerComfort = 30;
|
totalPassengerComfort = 30;
|
||||||
totalPassengerLady = 30;
|
totalPassengerLady = 30;
|
||||||
totalPassengerMotoDelivery = 18;
|
totalPassengerScooter = 18;
|
||||||
} else {
|
} else {
|
||||||
totalPassenger = totalCostPassenger;
|
totalPassenger = totalCostPassenger;
|
||||||
update();
|
update();
|
||||||
@@ -3442,7 +3504,9 @@ class MapPassengerController extends GetxController {
|
|||||||
(-1) * (double.parse(box.read(BoxName.passengerWalletTotal)));
|
(-1) * (double.parse(box.read(BoxName.passengerWalletTotal)));
|
||||||
totalPassengerBalash = totalPassengerBalash +
|
totalPassengerBalash = totalPassengerBalash +
|
||||||
(-1) * (double.parse(box.read(BoxName.passengerWalletTotal)));
|
(-1) * (double.parse(box.read(BoxName.passengerWalletTotal)));
|
||||||
totalPassengerMotoDelivery = totalPassengerMotoDelivery +
|
totalPassengerScooter = totalPassengerScooter +
|
||||||
|
(-1) * (double.parse(box.read(BoxName.passengerWalletTotal)));
|
||||||
|
totalPassengerRayehGai = totalPassengerScooter +
|
||||||
(-1) * (double.parse(box.read(BoxName.passengerWalletTotal)));
|
(-1) * (double.parse(box.read(BoxName.passengerWalletTotal)));
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
@@ -3559,50 +3623,79 @@ class MapPassengerController extends GetxController {
|
|||||||
try {
|
try {
|
||||||
// Prepare trip data
|
// Prepare trip data
|
||||||
Map<String, dynamic> tripData = {
|
Map<String, dynamic> tripData = {
|
||||||
'id': driver['id'],
|
'driverId': driver['id'].toString(),
|
||||||
'phone': driver['phone'],
|
'phone': driver['phone'].toString(),
|
||||||
'gender': driver['gender'],
|
'gender': driver['gender'].toString(),
|
||||||
'name': driver['name'],
|
'name': driver['NAME']
|
||||||
'name_english': driver['name_english'],
|
.toString(), // Confirm this key exists in the driver map
|
||||||
'address': driver['address'],
|
'name_english': driver['name_english'].toString(),
|
||||||
|
'address': driver['address'].toString(),
|
||||||
'religion': driver['religion'],
|
'religion': driver['religion'],
|
||||||
'age': driver['age'],
|
'age': driver['age'].toString(),
|
||||||
'education': driver['education'],
|
'education': driver['education'].toString(),
|
||||||
'license_type': driver['license_type'],
|
'license_type': driver['license_type'].toString(),
|
||||||
'national_number': driver['national_number'],
|
'national_number': driver['national_number'].toString(),
|
||||||
'car_plate': driver['car_plate'],
|
'car_plate': driver['car_plate'].toString(),
|
||||||
'make': driver['make'],
|
'make': driver['make'].toString(),
|
||||||
'model': driver['model'],
|
'model': driver['model'].toString(),
|
||||||
'year': driver['year'],
|
'color': driver['color'].toString(),
|
||||||
'color': driver['color'],
|
'color_hex': driver['color_hex'].toString(),
|
||||||
'color_hex': driver['color_hex'],
|
'token': driver['token'].toString(),
|
||||||
'displacement': driver['displacement'],
|
'rating': driver['rating'].toString(),
|
||||||
'fuel': driver['fuel'],
|
'countRide': driver['countRide'].toString(),
|
||||||
'token': driver['token'],
|
'passengerId': box.read(BoxName.passengerID).toString(),
|
||||||
'rating': driver['rating'],
|
'timeSelected': tripDateTime.toString(),
|
||||||
'countRide': driver['countRide'],
|
'status': 'pending',
|
||||||
'passengerId': box.read(BoxName.passengerID),
|
|
||||||
'timeSelected': tripDateTime.toIso8601String(),
|
|
||||||
'status': 'pending', // Or other appropriate status
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Log.print('tripData prepared: $tripData');
|
||||||
|
|
||||||
// Send data to server
|
// Send data to server
|
||||||
var response =
|
var response = await CRUD().post(
|
||||||
await CRUD().post(link: AppLink.addMishwari, payload: tripData);
|
link: AppLink.addMishwari,
|
||||||
|
payload: tripData,
|
||||||
|
);
|
||||||
|
|
||||||
if (response != 'failure') {
|
Log.print('Server response received: $response');
|
||||||
// Trip saved successfully
|
|
||||||
Get.snackbar('Success'.tr, 'Trip booked successfully'.tr);
|
|
||||||
|
|
||||||
// Set up local notification
|
if (response != 'failure' && response != null) {
|
||||||
// await setLocalNotification(tripDateTime);
|
Get.back();
|
||||||
|
Future.delayed(Duration.zero);
|
||||||
// Send notification to driver
|
Get.defaultDialog(
|
||||||
// await FirebaseMessagesController().sendNotificationToDriverMAP();
|
title: 'Success'.tr,
|
||||||
|
middleText: 'Trip booked successfully'.tr,
|
||||||
|
confirm: MyElevatedButton(
|
||||||
|
title: 'Accept'.tr,
|
||||||
|
onPressed: () async {
|
||||||
|
FirebaseMessagesController().sendNotificationToDriverMAP(
|
||||||
|
'VIP Order'.tr,
|
||||||
|
'from: ${box.read(BoxName.name)}',
|
||||||
|
driver['token'].toString(),
|
||||||
|
[
|
||||||
|
box.read(BoxName.tokenFCM).toString(),
|
||||||
|
tripDateTime.toString()
|
||||||
|
],
|
||||||
|
'order.wav');
|
||||||
|
Get.back();
|
||||||
|
},
|
||||||
|
kolor: AppColor.greenColor,
|
||||||
|
));
|
||||||
|
Get.snackbar('Success'.tr, 'Trip booked successfully'.tr,
|
||||||
|
backgroundColor: AppColor.greenColor);
|
||||||
} else {
|
} else {
|
||||||
throw Exception('Failed to save trip');
|
Get.back();
|
||||||
|
MyDialog().getDialog(
|
||||||
|
'Error'.tr,
|
||||||
|
"Driver already has 2 trips within the specified period.".tr,
|
||||||
|
() {});
|
||||||
|
|
||||||
|
Get.snackbar('Error'.tr, 'Trip booked successfully'.tr,
|
||||||
|
backgroundColor: AppColor.redColor);
|
||||||
|
Log.print('Error response from server: $response');
|
||||||
|
throw Exception('Failed to save trip with response: $response');
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
Log.print('Exception caught: $e');
|
||||||
Get.snackbar('Error'.tr, 'Failed to book trip: $e'.tr);
|
Get.snackbar('Error'.tr, 'Failed to book trip: $e'.tr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3679,7 +3772,7 @@ class MapPassengerController extends GetxController {
|
|||||||
addCustomStepIcon();
|
addCustomStepIcon();
|
||||||
addCustomStartIcon();
|
addCustomStartIcon();
|
||||||
addCustomEndIcon();
|
addCustomEndIcon();
|
||||||
await getLocation();
|
getLocation();
|
||||||
|
|
||||||
// await addToken();
|
// await addToken();
|
||||||
getKazanPercent();
|
getKazanPercent();
|
||||||
|
|||||||
@@ -154,11 +154,15 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"You have call from driver": " لديك مكالمة من السائق",
|
"You have call from driver": " لديك مكالمة من السائق",
|
||||||
"Comfort": "كمفورت",
|
"Comfort": "كمفورت",
|
||||||
"Speed": "سبيد",
|
"Speed": "سبيد",
|
||||||
|
"Driver already has 2 trips within the specified period.":
|
||||||
|
'السائق لديه بالفعل رحلتان خلال الفترة المحددة.',
|
||||||
"The invitation was sent successfully": "تم إرسال الدعوة بنجاح",
|
"The invitation was sent successfully": "تم إرسال الدعوة بنجاح",
|
||||||
"Lady": "ليدي",
|
"Lady": "ليدي",
|
||||||
"You should select your country": "يجب عليك اختيار بلدك",
|
"You should select your country": "يجب عليك اختيار بلدك",
|
||||||
"Delivery": "توصيل",
|
"Scooter": "سكوتر",
|
||||||
"Mashwari": "مشواري",
|
'A trip with a prior reservation, allowing you to choose the best captains and cars.':
|
||||||
|
'مشوار بحجز مسبق مع إمكانية اختيارك لأفضل الكباتن والسيارات',
|
||||||
|
"Mishwar Vip": "مشوار VIP",
|
||||||
'The driver waiting you in picked location .':
|
'The driver waiting you in picked location .':
|
||||||
"السائق ينتظرك في موقع الركوب.",
|
"السائق ينتظرك في موقع الركوب.",
|
||||||
'About Us': "نبذة عنا",
|
'About Us': "نبذة عنا",
|
||||||
@@ -740,7 +744,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": 'وَقْتُ الْوُصُولِ ',
|
"Arrival time": 'وَقْتُ الْوُصُولِ ',
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
'الْوَقْتُ المُتَوَقَّعُ لِلْوُصُولِ إِلَى وَجْهَتِكَ ',
|
'الْوَقْتُ المُتَوَقَّعُ لِلْوُصُولِ إِلَى وَجْهَتِكَ ',
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
'بِالنِّسْبَةِ لِرِحْلَاتِ السُّرْعَةِ وَالتَّوْصِيلِ، يَتِمُّ حِسَابُ السِّعْرِ بِشَكْلٍ دِينَامِيكِيٍّ. أَمَّا بِالنِّسْبَةِ لِرِحْلَاتِ الرَّاحَةِ، فَيَتِمُّ حِسَابُ السِّعْرِ بِنَاءً عَلَى الْوَقْتِ وَالْمَسَافَةِ.',
|
'بِالنِّسْبَةِ لِرِحْلَاتِ السُّرْعَةِ وَالتَّوْصِيلِ، يَتِمُّ حِسَابُ السِّعْرِ بِشَكْلٍ دِينَامِيكِيٍّ. أَمَّا بِالنِّسْبَةِ لِرِحْلَاتِ الرَّاحَةِ، فَيَتِمُّ حِسَابُ السِّعْرِ بِنَاءً عَلَى الْوَقْتِ وَالْمَسَافَةِ.',
|
||||||
"Hello this is Driver": "مَرْحَبًا هَذَا السَّائِقُ",
|
"Hello this is Driver": "مَرْحَبًا هَذَا السَّائِقُ",
|
||||||
"Is the Passenger in your Car ?": "هَلِ الرَّاكِبُ فِي سَيَّارَتِكَ؟",
|
"Is the Passenger in your Car ?": "هَلِ الرَّاكِبُ فِي سَيَّارَتِكَ؟",
|
||||||
@@ -762,7 +766,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"رحلة مكيفة ومسار متغير لرغبة العميل ونقاط توقف",
|
"رحلة مكيفة ومسار متغير لرغبة العميل ونقاط توقف",
|
||||||
"Insert": "إِدْرَاجُ",
|
"Insert": "إِدْرَاجُ",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"هَذَا لِلتَّسْلِيمِ أَوِ الدَّرَّاجَةِ النَّارِيَّةِ",
|
"هَذَا لِلتَّسْلِيمِ أَوِ الدَّرَّاجَةِ النَّارِيَّةِ",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
'رحلة محددة السعر والشريك السائق ملتزم بالمسار المحدد من خلال التطبيق',
|
'رحلة محددة السعر والشريك السائق ملتزم بالمسار المحدد من خلال التطبيق',
|
||||||
@@ -801,6 +805,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"الرَّجَاء الْمُسَاعَدَة! اِتَّصِل بِي فِي أَقْرَب وَقْت مُمْكِن",
|
"الرَّجَاء الْمُسَاعَدَة! اِتَّصِل بِي فِي أَقْرَب وَقْت مُمْكِن",
|
||||||
"Share Trip Details": "مُشَارَكَة تَفَاصِيل الرِّحْلَة",
|
"Share Trip Details": "مُشَارَكَة تَفَاصِيل الرِّحْلَة",
|
||||||
"Car Plate is ": "رَقْم اللَّوْحَة",
|
"Car Plate is ": "رَقْم اللَّوْحَة",
|
||||||
|
"VIP Order": "طلب VIP",
|
||||||
"the 300 points equal 300 L.E for you \nSo go and gain your money":
|
"the 300 points equal 300 L.E for you \nSo go and gain your money":
|
||||||
"اِرْبَح ٣٠٠ جُنَيه! كُلّ ٣٠٠ نُقْطَة تُمْنِحُك ٣٠٠ جُنَيه. اِذْهَب وَاِسْتَفِد مِن نُقَاطِك!",
|
"اِرْبَح ٣٠٠ جُنَيه! كُلّ ٣٠٠ نُقْطَة تُمْنِحُك ٣٠٠ جُنَيه. اِذْهَب وَاِسْتَفِد مِن نُقَاطِك!",
|
||||||
"the 300 points equal 300 L.E":
|
"the 300 points equal 300 L.E":
|
||||||
@@ -809,6 +814,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
'لم يتم الموافقة على الدفع. الرجاء المحاولة مرة أخرى.',
|
'لم يتم الموافقة على الدفع. الرجاء المحاولة مرة أخرى.',
|
||||||
"Payment Failed": 'فشل الدفع',
|
"Payment Failed": 'فشل الدفع',
|
||||||
"Error": 'خطأ',
|
"Error": 'خطأ',
|
||||||
|
'This is a scheduled notification.': "هذا إشعار مجدول.",
|
||||||
"An error occurred during the payment process.":
|
"An error occurred during the payment process.":
|
||||||
'حدث خطأ أثناء عملية الدفع.',
|
'حدث خطأ أثناء عملية الدفع.',
|
||||||
"The payment was approved.": 'تمت الموافقة على الدفع.',
|
"The payment was approved.": 'تمت الموافقة على الدفع.',
|
||||||
@@ -923,10 +929,17 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Payment History": "تاريخ المدفوعات",
|
"Payment History": "تاريخ المدفوعات",
|
||||||
"Show Promos to Charge": "إظهار العروض للشحن",
|
"Show Promos to Charge": "إظهار العروض للشحن",
|
||||||
"Point": "نقطة",
|
"Point": "نقطة",
|
||||||
|
'How many hours would you like to wait?':
|
||||||
|
"كم عدد الساعات التي تود الانتظار؟",
|
||||||
"Driver Wallet": "محفظة السائق",
|
"Driver Wallet": "محفظة السائق",
|
||||||
|
"Choose between those Type Cars":
|
||||||
|
'اختر من بين أنواع السيارات التالية',
|
||||||
|
"hour": ' ساعه',
|
||||||
|
'Select Waiting Hours': "• اختر ساعات الانتظار",
|
||||||
"Total Points is": "إجمالي النقاط هو",
|
"Total Points is": "إجمالي النقاط هو",
|
||||||
"You will receive a code in SMS message":
|
"You will receive a code in SMS message":
|
||||||
"سوف تتلقى رمزًا في رسالة SMS",
|
"سوف تتلقى رمزًا في رسالة SMS",
|
||||||
|
"Done": 'تم',
|
||||||
"Total Budget from trips is ": "إجمالي الميزانية من الرحلات هو ",
|
"Total Budget from trips is ": "إجمالي الميزانية من الرحلات هو ",
|
||||||
"Total Amount:": "المبلغ الإجمالي:",
|
"Total Amount:": "المبلغ الإجمالي:",
|
||||||
"Total Budget from trips by\nCredit card is ":
|
"Total Budget from trips by\nCredit card is ":
|
||||||
@@ -1558,7 +1571,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": "Varış zamanı",
|
"Arrival time": "Varış zamanı",
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
"varış noktanıza ulaşmak için varış zamanı",
|
"varış noktanıza ulaşmak için varış zamanı",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"Hızlı ve Teslimat seferlerinde fiyat dinamik olarak hesaplanır. Konfor gezileri için fiyat, zamana ve mesafeye bağlıdır",
|
"Hızlı ve Teslimat seferlerinde fiyat dinamik olarak hesaplanır. Konfor gezileri için fiyat, zamana ve mesafeye bağlıdır",
|
||||||
"Hello this is Driver": "Merhaba ben Sürücü",
|
"Hello this is Driver": "Merhaba ben Sürücü",
|
||||||
"Is the Passenger in your Car ?": "Yolcu Arabanızda mı?",
|
"Is the Passenger in your Car ?": "Yolcu Arabanızda mı?",
|
||||||
@@ -1579,7 +1592,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"Konforlu araç ve esnek rota ve durak noktaları için en iyi seçim",
|
"Konforlu araç ve esnek rota ve durak noktaları için en iyi seçim",
|
||||||
"Insert": "Sokmak",
|
"Insert": "Sokmak",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"Bu teslimat veya motosiklet içindir.",
|
"Bu teslimat veya motosiklet içindir.",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"Bu yolculuk, sabit bir ücret karşılığında doğrudan başlangıç noktanızdan varış noktanıza gider. Sürücü planlanan rotayı takip etmelidir",
|
"Bu yolculuk, sabit bir ücret karşılığında doğrudan başlangıç noktanızdan varış noktanıza gider. Sürücü planlanan rotayı takip etmelidir",
|
||||||
@@ -2388,8 +2401,8 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": "Heure d'arrivée",
|
"Arrival time": "Heure d'arrivée",
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
"heure d'arrivée pour atteindre votre point",
|
"heure d'arrivée pour atteindre votre point",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"Pour les courses Speed et Delivery, le prix est calculé dynamiquement. Pour les trajets Confort, le prix est fonction du temps et de la distance",
|
"Pour les courses Speed et scooter, le prix est calculé dynamiquement. Pour les trajets Confort, le prix est fonction du temps et de la distance",
|
||||||
"Hello this is Driver": "Bonjour, c'est Driver",
|
"Hello this is Driver": "Bonjour, c'est Driver",
|
||||||
"Is the Passenger in your Car ?":
|
"Is the Passenger in your Car ?":
|
||||||
"Le passager est-il dans votre voiture ?",
|
"Le passager est-il dans votre voiture ?",
|
||||||
@@ -2410,7 +2423,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"Meilleur choix pour une voiture de confort et un itinéraire et un point d'arrêt flexibles",
|
"Meilleur choix pour une voiture de confort et un itinéraire et un point d'arrêt flexibles",
|
||||||
"Insert": "Insérer",
|
"Insert": "Insérer",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"C'est pour une livraison ou une moto.",
|
"C'est pour une livraison ou une moto.",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"Ce voyage va directement de votre point de départ à votre destination pour un prix fixe. Le chauffeur doit suivre l'itinéraire prévu",
|
"Ce voyage va directement de votre point de départ à votre destination pour un prix fixe. Le chauffeur doit suivre l'itinéraire prévu",
|
||||||
@@ -3230,8 +3243,8 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": "Ankunftszeit",
|
"Arrival time": "Ankunftszeit",
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
"Ankunftszeit, um Ihren Punkt zu erreichen",
|
"Ankunftszeit, um Ihren Punkt zu erreichen",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"Für Speed- und Delivery-Fahrten wird der Preis dynamisch berechnet. Bei Komfortfahrten richtet sich der Preis nach Zeit und Entfernung",
|
"Für Speed- und scooter-Fahrten wird der Preis dynamisch berechnet. Bei Komfortfahrten richtet sich der Preis nach Zeit und Entfernung",
|
||||||
"Hello this is Driver": "Hallo, hier ist Driver",
|
"Hello this is Driver": "Hallo, hier ist Driver",
|
||||||
"Is the Passenger in your Car ?":
|
"Is the Passenger in your Car ?":
|
||||||
"Befindet sich der Beifahrer in Ihrem Auto?",
|
"Befindet sich der Beifahrer in Ihrem Auto?",
|
||||||
@@ -3252,7 +3265,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"Beste Wahl für ein komfortables Auto und eine flexible Route und Haltestellen",
|
"Beste Wahl für ein komfortables Auto und eine flexible Route und Haltestellen",
|
||||||
"Insert": "Einfügen",
|
"Insert": "Einfügen",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"Dies ist für die Lieferung oder ein Motorrad.",
|
"Dies ist für die Lieferung oder ein Motorrad.",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"Diese Reise führt zum Festpreis direkt von Ihrem Startpunkt zu Ihrem Ziel. Der Fahrer muss der geplanten Route folgen",
|
"Diese Reise führt zum Festpreis direkt von Ihrem Startpunkt zu Ihrem Ziel. Der Fahrer muss der geplanten Route folgen",
|
||||||
@@ -4063,7 +4076,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": "Hora de llegada",
|
"Arrival time": "Hora de llegada",
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
"Hora de llegada para llegar a tu punto.",
|
"Hora de llegada para llegar a tu punto.",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"Para viajes de Velocidad y Entrega, el precio se calcula dinámicamente. Para viajes Comfort, el precio se basa en tiempo y distancia.",
|
"Para viajes de Velocidad y Entrega, el precio se calcula dinámicamente. Para viajes Comfort, el precio se basa en tiempo y distancia.",
|
||||||
"Hello this is Driver": "Hola, este es el conductor.",
|
"Hello this is Driver": "Hola, este es el conductor.",
|
||||||
"Is the Passenger in your Car ?":
|
"Is the Passenger in your Car ?":
|
||||||
@@ -4085,7 +4098,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"La mejor opción para un vehículo cómodo y una ruta y un punto de parada flexibles",
|
"La mejor opción para un vehículo cómodo y una ruta y un punto de parada flexibles",
|
||||||
"Insert": "Insertar",
|
"Insert": "Insertar",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"Esto es para entrega o una motocicleta.",
|
"Esto es para entrega o una motocicleta.",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"Este viaje va directamente desde su punto de partida a su destino por un precio fijo. El conductor debe seguir la ruta planificada.",
|
"Este viaje va directamente desde su punto de partida a su destino por un precio fijo. El conductor debe seguir la ruta planificada.",
|
||||||
@@ -4881,7 +4894,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": "زمان رسیدن",
|
"Arrival time": "زمان رسیدن",
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
"زمان رسیدن برای رسیدن به نقطه خود",
|
"زمان رسیدن برای رسیدن به نقطه خود",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"برای سفرهای سرعت و تحویل، قیمت به صورت پویا محاسبه می شود. برای سفرهای Comfort، قیمت بر اساس زمان و مسافت است",
|
"برای سفرهای سرعت و تحویل، قیمت به صورت پویا محاسبه می شود. برای سفرهای Comfort، قیمت بر اساس زمان و مسافت است",
|
||||||
"Hello this is Driver": "سلام این راننده است",
|
"Hello this is Driver": "سلام این راننده است",
|
||||||
"Is the Passenger in your Car ?": "آیا مسافر در ماشین شماست؟",
|
"Is the Passenger in your Car ?": "آیا مسافر در ماشین شماست؟",
|
||||||
@@ -4902,7 +4915,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"بهترین انتخاب برای ماشین راحت و مسیر انعطاف پذیر و نقطه توقف",
|
"بهترین انتخاب برای ماشین راحت و مسیر انعطاف پذیر و نقطه توقف",
|
||||||
"Insert": "درج کنید",
|
"Insert": "درج کنید",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"این برای تحویل یا موتور سیکلت است.",
|
"این برای تحویل یا موتور سیکلت است.",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"این سفر مستقیماً از نقطه شروع شما به مقصد شما با قیمت ثابت می رود. راننده باید مسیر برنامه ریزی شده را دنبال کند",
|
"این سفر مستقیماً از نقطه شروع شما به مقصد شما با قیمت ثابت می رود. راننده باید مسیر برنامه ریزی شده را دنبال کند",
|
||||||
@@ -5708,7 +5721,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": "Ωρα άφιξης",
|
"Arrival time": "Ωρα άφιξης",
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
"ώρα άφιξης για να φτάσετε στο σημείο σας",
|
"ώρα άφιξης για να φτάσετε στο σημείο σας",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"Για ταξίδια Ταχύτητας και Παράδοσης, η τιμή υπολογίζεται δυναμικά. Για Comfort ταξίδια, η τιμή βασίζεται σε χρόνο και απόσταση",
|
"Για ταξίδια Ταχύτητας και Παράδοσης, η τιμή υπολογίζεται δυναμικά. Για Comfort ταξίδια, η τιμή βασίζεται σε χρόνο και απόσταση",
|
||||||
"Hello this is Driver": "Γεια σας, αυτός είναι ο οδηγός",
|
"Hello this is Driver": "Γεια σας, αυτός είναι ο οδηγός",
|
||||||
"Is the Passenger in your Car ?":
|
"Is the Passenger in your Car ?":
|
||||||
@@ -5730,7 +5743,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"Η καλύτερη επιλογή για αυτοκίνητο άνεσης και ευέλικτη διαδρομή και σημείο στάσεων",
|
"Η καλύτερη επιλογή για αυτοκίνητο άνεσης και ευέλικτη διαδρομή και σημείο στάσεων",
|
||||||
"Insert": "Εισάγετε",
|
"Insert": "Εισάγετε",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"Αυτό είναι για παράδοση ή μοτοσυκλέτα.",
|
"Αυτό είναι για παράδοση ή μοτοσυκλέτα.",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"Αυτό το ταξίδι πηγαίνει απευθείας από το σημείο εκκίνησης στον προορισμό σας για μια σταθερή τιμή. Ο οδηγός πρέπει να ακολουθήσει την προγραμματισμένη διαδρομή",
|
"Αυτό το ταξίδι πηγαίνει απευθείας από το σημείο εκκίνησης στον προορισμό σας για μια σταθερή τιμή. Ο οδηγός πρέπει να ακολουθήσει την προγραμματισμένη διαδρομή",
|
||||||
@@ -6539,7 +6552,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": "آمد کے وقت",
|
"Arrival time": "آمد کے وقت",
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
"آپ کے نقطہ تک پہنچنے کے لئے آمد کا وقت",
|
"آپ کے نقطہ تک پہنچنے کے لئے آمد کا وقت",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"سپیڈ اور ڈیلیوری ٹرپس کے لیے، قیمت کا حساب متحرک طور پر کیا جاتا ہے۔ آرام دہ دوروں کے لیے، قیمت وقت اور فاصلے پر مبنی ہے۔",
|
"سپیڈ اور ڈیلیوری ٹرپس کے لیے، قیمت کا حساب متحرک طور پر کیا جاتا ہے۔ آرام دہ دوروں کے لیے، قیمت وقت اور فاصلے پر مبنی ہے۔",
|
||||||
"Hello this is Driver": "ہیلو یہ ڈرائیور ہے۔",
|
"Hello this is Driver": "ہیلو یہ ڈرائیور ہے۔",
|
||||||
"Is the Passenger in your Car ?": "کیا مسافر آپ کی گاڑی میں ہے؟",
|
"Is the Passenger in your Car ?": "کیا مسافر آپ کی گاڑی میں ہے؟",
|
||||||
@@ -6560,7 +6573,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"آرام دہ کار اور لچکدار روٹ اور اسٹاپ پوائنٹ کے لیے بہترین انتخاب",
|
"آرام دہ کار اور لچکدار روٹ اور اسٹاپ پوائنٹ کے لیے بہترین انتخاب",
|
||||||
"Insert": "داخل کریں",
|
"Insert": "داخل کریں",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"یہ ڈیلیوری یا موٹرسائیکل کے لیے ہے۔",
|
"یہ ڈیلیوری یا موٹرسائیکل کے لیے ہے۔",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"یہ سفر ایک مقررہ قیمت پر آپ کے نقطہ آغاز سے براہ راست آپ کی منزل تک جاتا ہے۔ ڈرائیور کو منصوبہ بند راستے پر چلنا چاہیے۔",
|
"یہ سفر ایک مقررہ قیمت پر آپ کے نقطہ آغاز سے براہ راست آپ کی منزل تک جاتا ہے۔ ڈرائیور کو منصوبہ بند راستے پر چلنا چاہیے۔",
|
||||||
@@ -7357,7 +7370,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": "आगमन का समय",
|
"Arrival time": "आगमन का समय",
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
"अपनी बात तक पहुंचने के लिए आगमन का समय",
|
"अपनी बात तक पहुंचने के लिए आगमन का समय",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"स्पीड और डिलीवरी ट्रिप के लिए, कीमत की गणना गतिशील रूप से की जाती है। आरामदायक यात्राओं के लिए, कीमत समय और दूरी पर आधारित होती है",
|
"स्पीड और डिलीवरी ट्रिप के लिए, कीमत की गणना गतिशील रूप से की जाती है। आरामदायक यात्राओं के लिए, कीमत समय और दूरी पर आधारित होती है",
|
||||||
"Hello this is Driver": "नमस्ते, मैं ड्राइवर हूं",
|
"Hello this is Driver": "नमस्ते, मैं ड्राइवर हूं",
|
||||||
"Is the Passenger in your Car ?": "क्या यात्री आपकी कार में है?",
|
"Is the Passenger in your Car ?": "क्या यात्री आपकी कार में है?",
|
||||||
@@ -7379,7 +7392,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"आरामदायक कार और लचीले मार्ग और स्टॉप पॉइंट के लिए सर्वोत्तम विकल्प",
|
"आरामदायक कार और लचीले मार्ग और स्टॉप पॉइंट के लिए सर्वोत्तम विकल्प",
|
||||||
"Insert": "डालना",
|
"Insert": "डालना",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"यह डिलीवरी या मोटरसाइकिल के लिए है।",
|
"यह डिलीवरी या मोटरसाइकिल के लिए है।",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"यह यात्रा एक निश्चित कीमत पर आपके शुरुआती बिंदु से सीधे आपके गंतव्य तक जाती है। चालक को नियोजित मार्ग का पालन करना होगा",
|
"यह यात्रा एक निश्चित कीमत पर आपके शुरुआती बिंदु से सीधे आपके गंतव्य तक जाती है। चालक को नियोजित मार्ग का पालन करना होगा",
|
||||||
@@ -8183,7 +8196,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": "Время прибытия",
|
"Arrival time": "Время прибытия",
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
"время прибытия, чтобы добраться до вашей точки",
|
"время прибытия, чтобы добраться до вашей точки",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"Для поездок «Скорость» и «Доставка» цена рассчитывается динамически. Для поездок Комфорт цена зависит от времени и расстояния.",
|
"Для поездок «Скорость» и «Доставка» цена рассчитывается динамически. Для поездок Комфорт цена зависит от времени и расстояния.",
|
||||||
"Hello this is Driver": "Привет, это Драйвер",
|
"Hello this is Driver": "Привет, это Драйвер",
|
||||||
"Is the Passenger in your Car ?": "Пассажир в вашей машине?",
|
"Is the Passenger in your Car ?": "Пассажир в вашей машине?",
|
||||||
@@ -8204,7 +8217,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"Лучший выбор для комфортного автомобиля, гибкого маршрута и остановок.",
|
"Лучший выбор для комфортного автомобиля, гибкого маршрута и остановок.",
|
||||||
"Insert": "Вставлять",
|
"Insert": "Вставлять",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"Это на доставку или мотоцикл.",
|
"Это на доставку или мотоцикл.",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"Эта поездка идет прямо от отправной точки до пункта назначения по фиксированной цене. Водитель должен следовать запланированному маршруту",
|
"Эта поездка идет прямо от отправной точки до пункта назначения по фиксированной цене. Водитель должен следовать запланированному маршруту",
|
||||||
@@ -9014,8 +9027,8 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Arrival time": "Orario di arrivo",
|
"Arrival time": "Orario di arrivo",
|
||||||
"arrival time to reach your point":
|
"arrival time to reach your point":
|
||||||
"orario di arrivo per raggiungere il tuo punto",
|
"orario di arrivo per raggiungere il tuo punto",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"Per i viaggi Speed e Delivery il prezzo viene calcolato dinamicamente. Per i viaggi Comfort il prezzo dipende dal tempo e dalla distanza",
|
"Per i viaggi Speed e scooter il prezzo viene calcolato dinamicamente. Per i viaggi Comfort il prezzo dipende dal tempo e dalla distanza",
|
||||||
"Hello this is Driver": "Ciao, sono Driver",
|
"Hello this is Driver": "Ciao, sono Driver",
|
||||||
"Is the Passenger in your Car ?": "Il passeggero è nella tua auto?",
|
"Is the Passenger in your Car ?": "Il passeggero è nella tua auto?",
|
||||||
"Please wait for the passenger to enter the car before starting the trip.":
|
"Please wait for the passenger to enter the car before starting the trip.":
|
||||||
@@ -9035,7 +9048,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"La scelta migliore per un'auto confortevole e un percorso flessibile e punti di sosta",
|
"La scelta migliore per un'auto confortevole e un percorso flessibile e punti di sosta",
|
||||||
"Insert": "Inserire",
|
"Insert": "Inserire",
|
||||||
"This is for delivery or a motorcycle.":
|
"This is for scooter or a motorcycle.":
|
||||||
"Questo è per la consegna o una moto.",
|
"Questo è per la consegna o una moto.",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"Questo viaggio va direttamente dal tuo punto di partenza alla tua destinazione a un prezzo fisso. L'autista deve seguire il percorso previsto",
|
"Questo viaggio va direttamente dal tuo punto di partenza alla tua destinazione a un prezzo fisso. L'autista deve seguire il percorso previsto",
|
||||||
@@ -9776,7 +9789,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Cost Of Trip IS": "旅行费用是",
|
"Cost Of Trip IS": "旅行费用是",
|
||||||
"Arrival time": "到达时间",
|
"Arrival time": "到达时间",
|
||||||
"arrival time to reach your point": "到达目的地的到达时间",
|
"arrival time to reach your point": "到达目的地的到达时间",
|
||||||
"For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
"For Speed and scooter trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance":
|
||||||
"对于速度和送货行程,价格是动态计算的。对于舒适旅行,价格根据时间和距离而定",
|
"对于速度和送货行程,价格是动态计算的。对于舒适旅行,价格根据时间和距离而定",
|
||||||
"Hello this is Driver": "你好,这是司机",
|
"Hello this is Driver": "你好,这是司机",
|
||||||
"Is the Passenger in your Car ?": "乘客在你的车里吗?",
|
"Is the Passenger in your Car ?": "乘客在你的车里吗?",
|
||||||
@@ -9794,7 +9807,7 @@ iOS [https://getapp.cc/app/6458734951]
|
|||||||
"Best choice for comfort car and flexible route and stops point":
|
"Best choice for comfort car and flexible route and stops point":
|
||||||
"舒适用车、灵活路线和停靠点的最佳选择",
|
"舒适用车、灵活路线和停靠点的最佳选择",
|
||||||
"Insert": "插入",
|
"Insert": "插入",
|
||||||
"This is for delivery or a motorcycle.": "这是用于送货或摩托车。",
|
"This is for scooter or a motorcycle.": "这是用于送货或摩托车。",
|
||||||
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
"This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route":
|
||||||
"此行程以固定价格直接从您的出发地前往目的地。司机必须按照计划的路线行驶",
|
"此行程以固定价格直接从您的出发地前往目的地。司机必须按照计划的路线行驶",
|
||||||
"You can decline a request without any cost": "您可以拒绝请求,无需支付任何费用",
|
"You can decline a request without any cost": "您可以拒绝请求,无需支付任何费用",
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import 'package:SEFER/controller/home/home_page_controller.dart';
|
import 'package:SEFER/controller/home/home_page_controller.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:SEFER/constant/colors.dart';
|
import 'package:SEFER/constant/colors.dart';
|
||||||
@@ -6,6 +7,10 @@ import 'package:SEFER/constant/style.dart';
|
|||||||
import 'package:SEFER/views/lang/languages.dart';
|
import 'package:SEFER/views/lang/languages.dart';
|
||||||
import 'package:SEFER/views/widgets/my_scafold.dart';
|
import 'package:SEFER/views/widgets/my_scafold.dart';
|
||||||
|
|
||||||
|
import '../../constant/box_name.dart';
|
||||||
|
import '../../controller/profile/profile_controller.dart';
|
||||||
|
import '../../main.dart';
|
||||||
|
import '../widgets/elevated_btn.dart';
|
||||||
import 'HomePage/about_page.dart';
|
import 'HomePage/about_page.dart';
|
||||||
import 'HomePage/frequentlyQuestionsPage.dart';
|
import 'HomePage/frequentlyQuestionsPage.dart';
|
||||||
import 'HomePage/trip_record_page.dart';
|
import 'HomePage/trip_record_page.dart';
|
||||||
@@ -17,6 +22,16 @@ class HomePage extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
Get.put(HomePageController());
|
Get.put(HomePageController());
|
||||||
|
final List<String> countryOptions = [
|
||||||
|
'Jordan',
|
||||||
|
'USA',
|
||||||
|
'Egypt',
|
||||||
|
'Turkey',
|
||||||
|
'Saudi Arabia',
|
||||||
|
'Qatar',
|
||||||
|
'Bahrain',
|
||||||
|
'Kuwait',
|
||||||
|
];
|
||||||
return MyScafolld(
|
return MyScafolld(
|
||||||
isleading: true,
|
isleading: true,
|
||||||
title: 'Home Page'.tr,
|
title: 'Home Page'.tr,
|
||||||
@@ -45,21 +60,7 @@ class HomePage extends StatelessWidget {
|
|||||||
color: AppColor.primaryColor,
|
color: AppColor.primaryColor,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
ListTile(
|
changeCountry(countryOptions),
|
||||||
leading: const Icon(Icons.location_city_outlined),
|
|
||||||
title: Text(
|
|
||||||
'Change Country'.tr,
|
|
||||||
style: AppStyle.headTitle2,
|
|
||||||
),
|
|
||||||
subtitle: Text(
|
|
||||||
'You can change the Country to get all features'.tr,
|
|
||||||
style: AppStyle.title,
|
|
||||||
),
|
|
||||||
onTap: () => Get.to(MyScafolld(
|
|
||||||
title: 'Change Country'.tr,
|
|
||||||
body: [CountryPickerFromSetting()],
|
|
||||||
isleading: true)),
|
|
||||||
),
|
|
||||||
ListTile(
|
ListTile(
|
||||||
leading: const Icon(Icons.question_answer),
|
leading: const Icon(Icons.question_answer),
|
||||||
title: Text(
|
title: Text(
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:SEFER/main.dart';
|
|||||||
import 'package:SEFER/views/home/profile/passenger_profile_page.dart';
|
import 'package:SEFER/views/home/profile/passenger_profile_page.dart';
|
||||||
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
||||||
import 'package:SEFER/views/widgets/my_dialog.dart';
|
import 'package:SEFER/views/widgets/my_dialog.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
@@ -45,29 +46,47 @@ List<CarType> carTypes = [
|
|||||||
image: 'assets/images/lady.png',
|
image: 'assets/images/lady.png',
|
||||||
),
|
),
|
||||||
CarType(
|
CarType(
|
||||||
carType: 'Delivery',
|
carType: 'Scooter',
|
||||||
carDetail: 'Delivery service'.tr,
|
carDetail: 'Scooter service'.tr,
|
||||||
image: 'assets/images/moto.png',
|
image: 'assets/images/moto.png',
|
||||||
),
|
),
|
||||||
CarType(
|
CarType(
|
||||||
carType: 'Mashwari',
|
carType: 'Mishwar Vip',
|
||||||
carDetail: 'Mashwari without end point'.tr,
|
carDetail: 'Mishwar Vip without end point'.tr,
|
||||||
image: 'assets/images/freeRide.png',
|
image: 'assets/images/freeRide.png',
|
||||||
),
|
),
|
||||||
CarType(
|
|
||||||
carType: 'Rayeh Gai',
|
|
||||||
carDetail: "Best choice for cities".tr,
|
|
||||||
image: 'assets/images/roundtrip.png',
|
|
||||||
),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
class CarDetailsTypeToChoose extends StatelessWidget {
|
class CarDetailsTypeToChoose extends StatelessWidget {
|
||||||
CarDetailsTypeToChoose({super.key});
|
CarDetailsTypeToChoose({super.key});
|
||||||
final textToSpeechController = Get.put(TextToSpeechController());
|
final textToSpeechController = Get.put(TextToSpeechController());
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return GetBuilder<MapPassengerController>(
|
return GetBuilder<MapPassengerController>(
|
||||||
builder: (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 &&
|
return mapPassengerController.data.isNotEmpty &&
|
||||||
mapPassengerController.isBottomSheetShown &&
|
mapPassengerController.isBottomSheetShown &&
|
||||||
mapPassengerController.rideConfirm == false
|
mapPassengerController.rideConfirm == false
|
||||||
@@ -142,9 +161,9 @@ class CarDetailsTypeToChoose extends StatelessWidget {
|
|||||||
? mapPassengerController
|
? mapPassengerController
|
||||||
.totalPassengerBalash
|
.totalPassengerBalash
|
||||||
.toStringAsFixed(2)
|
.toStringAsFixed(2)
|
||||||
: carType.carType == 'Delivery'
|
: carType.carType == 'Scooter'
|
||||||
? mapPassengerController
|
? mapPassengerController
|
||||||
.totalPassengerMotoDelivery
|
.totalPassengerScooter
|
||||||
.toStringAsFixed(2)
|
.toStringAsFixed(2)
|
||||||
: carType.carType == 'Lady'
|
: carType.carType == 'Lady'
|
||||||
? mapPassengerController
|
? mapPassengerController
|
||||||
@@ -153,7 +172,7 @@ class CarDetailsTypeToChoose extends StatelessWidget {
|
|||||||
: carType.carType ==
|
: carType.carType ==
|
||||||
'Rayeh Gai'
|
'Rayeh Gai'
|
||||||
? mapPassengerController
|
? mapPassengerController
|
||||||
.totalPassengerRayehGai
|
.totalPassengerRayehGaiBalash
|
||||||
.toStringAsFixed(
|
.toStringAsFixed(
|
||||||
2)
|
2)
|
||||||
: '50',
|
: '50',
|
||||||
@@ -231,7 +250,7 @@ class CarDetailsTypeToChoose extends StatelessWidget {
|
|||||||
: carType.carType == 'Balash' &&
|
: carType.carType == 'Balash' &&
|
||||||
(mapPassengerController
|
(mapPassengerController
|
||||||
.totalPassengerBalash >
|
.totalPassengerBalash >
|
||||||
15)
|
20)
|
||||||
? Row(
|
? Row(
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
@@ -400,19 +419,19 @@ class CarDetailsTypeToChoose extends StatelessWidget {
|
|||||||
} else if (mapPassengerController
|
} else if (mapPassengerController
|
||||||
.selectedIndex ==
|
.selectedIndex ==
|
||||||
4) {
|
4) {
|
||||||
box.write(BoxName.carType, 'Delivery');
|
box.write(BoxName.carType, 'Scooter');
|
||||||
mapPassengerController.totalPassenger =
|
mapPassengerController.totalPassenger =
|
||||||
mapPassengerController
|
mapPassengerController
|
||||||
.totalPassengerMotoDelivery;
|
.totalPassengerScooter;
|
||||||
Get.defaultDialog(
|
Get.defaultDialog(
|
||||||
title: 'Delivery'.tr,
|
title: 'Scooter'.tr,
|
||||||
titleStyle: AppStyle.title,
|
titleStyle: AppStyle.title,
|
||||||
content: CarDialogue(
|
content: CarDialogue(
|
||||||
textToSpeechController:
|
textToSpeechController:
|
||||||
textToSpeechController,
|
textToSpeechController,
|
||||||
image: 'assets/images/moto.png',
|
image: 'assets/images/moto.png',
|
||||||
text:
|
text:
|
||||||
'This is for delivery or a motorcycle.'
|
'This is for Scooter or a motorcycle.'
|
||||||
.tr),
|
.tr),
|
||||||
confirm: MyElevatedButton(
|
confirm: MyElevatedButton(
|
||||||
kolor: AppColor.greenColor,
|
kolor: AppColor.greenColor,
|
||||||
@@ -434,17 +453,17 @@ class CarDetailsTypeToChoose extends StatelessWidget {
|
|||||||
} else if (mapPassengerController
|
} else if (mapPassengerController
|
||||||
.selectedIndex ==
|
.selectedIndex ==
|
||||||
5) {
|
5) {
|
||||||
box.write(BoxName.carType, 'Mashwari');
|
box.write(BoxName.carType, 'Mishwar Vip');
|
||||||
mapPassengerController.totalPassenger = 50;
|
mapPassengerController.totalPassenger = 50;
|
||||||
Get.defaultDialog(
|
Get.defaultDialog(
|
||||||
title: 'Mashwari'.tr,
|
title: 'Mishwar Vip'.tr,
|
||||||
titleStyle: AppStyle.title,
|
titleStyle: AppStyle.title,
|
||||||
content: CarDialogue(
|
content: CarDialogue(
|
||||||
textToSpeechController:
|
textToSpeechController:
|
||||||
textToSpeechController,
|
textToSpeechController,
|
||||||
image: 'assets/images/freeRide.png',
|
image: 'assets/images/freeRide.png',
|
||||||
text:
|
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),
|
.tr),
|
||||||
confirm: MyElevatedButton(
|
confirm: MyElevatedButton(
|
||||||
kolor: AppColor.greenColor,
|
kolor: AppColor.greenColor,
|
||||||
@@ -541,29 +560,175 @@ class CarDetailsTypeToChoose extends StatelessWidget {
|
|||||||
.selectedIndex ==
|
.selectedIndex ==
|
||||||
6) {
|
6) {
|
||||||
box.write(BoxName.carType, 'Rayeh Gai');
|
box.write(BoxName.carType, 'Rayeh Gai');
|
||||||
mapPassengerController.totalPassenger =
|
// mapPassengerController.totalPassenger =
|
||||||
mapPassengerController.totalPassengerLady;
|
// mapPassengerController.totalPassengerRayehGai;
|
||||||
Get.defaultDialog(
|
Get.defaultDialog(
|
||||||
title: 'Rayeh Gai'.tr,
|
title: 'Rayeh Gai'.tr,
|
||||||
titleStyle: AppStyle.title,
|
titleStyle: AppStyle.title,
|
||||||
content: CarDialogue(
|
content: Column(
|
||||||
textToSpeechController:
|
children: [
|
||||||
textToSpeechController,
|
CarDialogue(
|
||||||
image: 'assets/images/roundtrip.png',
|
textToSpeechController:
|
||||||
text:
|
textToSpeechController,
|
||||||
"Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable."
|
image:
|
||||||
.tr),
|
'assets/images/roundtrip.png',
|
||||||
confirm: MyElevatedButton(
|
text:
|
||||||
kolor: AppColor.greenColor,
|
"Rayeh Gai: Round trip service for convenient travel between cities, easy and reliable."
|
||||||
title: 'Next'.tr,
|
.tr),
|
||||||
onPressed: () {
|
const SizedBox(
|
||||||
Get.back();
|
height: 16,
|
||||||
mapPassengerController
|
),
|
||||||
.isBottomSheetShown = false;
|
Container(
|
||||||
mapPassengerController.update();
|
decoration: AppStyle.boxDecoration,
|
||||||
mapPassengerController
|
child: Padding(
|
||||||
.changeCashConfirmPageShown();
|
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(
|
cancel: MyElevatedButton(
|
||||||
title: 'Cancel'.tr,
|
title: 'Cancel'.tr,
|
||||||
kolor: AppColor.redColor,
|
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 {
|
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),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -338,7 +338,7 @@ class MainBottomMenuMap extends StatelessWidget {
|
|||||||
title: 'Yes'.tr,
|
title: 'Yes'.tr,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
Get.back();
|
Get.back();
|
||||||
await controller.getLocation();
|
controller.getLocation();
|
||||||
await controller.getMap(
|
await controller.getMap(
|
||||||
'${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
|
'${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
|
||||||
'${controller.recentPlaces[index]['latitude']},${controller.recentPlaces[index]['longitude']}',
|
'${controller.recentPlaces[index]['latitude']},${controller.recentPlaces[index]['longitude']}',
|
||||||
@@ -606,7 +606,7 @@ class FaviouratePlacesDialog extends StatelessWidget {
|
|||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
Get.back();
|
Get.back();
|
||||||
await controller.getLocation();
|
controller.getLocation();
|
||||||
await controller.getMap(
|
await controller.getMap(
|
||||||
'${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
|
'${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
|
||||||
'${favoritePlaces[index]['latitude']},${favoritePlaces[index]['longitude']}',
|
'${favoritePlaces[index]['latitude']},${favoritePlaces[index]['longitude']}',
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
import 'package:SEFER/constant/colors.dart';
|
import 'package:SEFER/constant/colors.dart';
|
||||||
import 'package:SEFER/constant/style.dart';
|
import 'package:SEFER/constant/style.dart';
|
||||||
import 'package:SEFER/controller/home/map_passenger_controller.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:SEFER/views/widgets/elevated_btn.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import '../../../constant/api_key.dart';
|
import '../../../constant/api_key.dart';
|
||||||
|
import '../../../print.dart';
|
||||||
|
|
||||||
class CupertinoDriverListWidget extends StatelessWidget {
|
class CupertinoDriverListWidget extends StatelessWidget {
|
||||||
MapPassengerController mapPassengerController =
|
MapPassengerController mapPassengerController =
|
||||||
@@ -30,7 +32,7 @@ class CupertinoDriverListWidget extends StatelessWidget {
|
|||||||
leading: CircleAvatar(
|
leading: CircleAvatar(
|
||||||
radius: 25,
|
radius: 25,
|
||||||
backgroundImage: NetworkImage(
|
backgroundImage: NetworkImage(
|
||||||
'${AK.serverPHP}/portrate_captain_image/${driver['id']}.jpg',
|
'${Env.seferCairoServer}/portrate_captain_image/${driver['id']}.jpg',
|
||||||
),
|
),
|
||||||
backgroundColor: CupertinoColors.systemGrey5,
|
backgroundColor: CupertinoColors.systemGrey5,
|
||||||
),
|
),
|
||||||
@@ -138,6 +140,7 @@ class CupertinoDriverListWidget extends StatelessWidget {
|
|||||||
onPressed: () {
|
onPressed: () {
|
||||||
Get.back();
|
Get.back();
|
||||||
showDateTimePickerDialog(driver);
|
showDateTimePickerDialog(driver);
|
||||||
|
Log.print('driver: ${driver}');
|
||||||
}));
|
}));
|
||||||
print('${'Selected driver'.tr}: ${driver['NAME']}');
|
print('${'Selected driver'.tr}: ${driver['NAME']}');
|
||||||
// Get.back(); // Close the dialog
|
// Get.back(); // Close the dialog
|
||||||
@@ -150,9 +153,18 @@ class CupertinoDriverListWidget extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Color hexToColor(String hexColor) {
|
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("#", "");
|
hexColor = hexColor.replaceAll("#", "");
|
||||||
String colorString = "ff$hexColor";
|
if (hexColor.length == 6) {
|
||||||
return Color(int.parse(colorString, radix: 16));
|
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) {
|
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) {
|
void showDateTimePickerDialog(Map<String, dynamic> driver) {
|
||||||
|
Log.print('driver: ${driver}');
|
||||||
DateTime selectedDateTime = DateTime.now();
|
DateTime selectedDateTime = DateTime.now();
|
||||||
|
|
||||||
Get.defaultDialog(
|
Get.defaultDialog(
|
||||||
@@ -209,12 +237,10 @@ class CupertinoDriverListWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
confirm: MyElevatedButton(
|
confirm: MyElevatedButton(
|
||||||
title: 'Confirm Trip'.tr,
|
title: 'Confirm Trip'.tr,
|
||||||
onPressed: () async {
|
onPressed: () {
|
||||||
DateTime selectedDateTime =
|
DateTime selectedDateTime =
|
||||||
mapPassengerController.selectedDateTime.value;
|
mapPassengerController.selectedDateTime.value;
|
||||||
// Save trip data and set up notifications
|
confirmTripData(driver, selectedDateTime);
|
||||||
Get.back();
|
|
||||||
await mapPassengerController.saveTripData(driver, selectedDateTime);
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -393,6 +393,92 @@ class CountryPicker extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ListTile changeCountry(List<String> countryOptions) {
|
||||||
|
return ListTile(
|
||||||
|
leading: const Icon(Icons.location_city_outlined),
|
||||||
|
title: Text(
|
||||||
|
'Change Country'.tr,
|
||||||
|
style: AppStyle.headTitle2,
|
||||||
|
),
|
||||||
|
subtitle: Text(
|
||||||
|
'You can change the Country to get all features'.tr,
|
||||||
|
style: AppStyle.title,
|
||||||
|
),
|
||||||
|
onTap: () => Get.to(MyScafolld(
|
||||||
|
title: 'Change Country'.tr,
|
||||||
|
// body: [],
|
||||||
|
body: [
|
||||||
|
GetBuilder<ProfileController>(builder: (controller) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.all(20.0),
|
||||||
|
child: ListView(
|
||||||
|
children: [
|
||||||
|
const SizedBox(
|
||||||
|
height: 20,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
"Select Your Country".tr,
|
||||||
|
style: AppStyle.headTitle2,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
// const SizedBox(
|
||||||
|
// height: 20,
|
||||||
|
// ),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(10),
|
||||||
|
child: Text(
|
||||||
|
"To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country."
|
||||||
|
.tr,
|
||||||
|
style: AppStyle.title,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 200,
|
||||||
|
child: CupertinoPicker(
|
||||||
|
itemExtent: 32,
|
||||||
|
onSelectedItemChanged: (int index) {
|
||||||
|
controller.setCountry(countryOptions[index]);
|
||||||
|
box.write(BoxName.countryCode,
|
||||||
|
countryOptions[index]); // Save in English
|
||||||
|
},
|
||||||
|
children: List.generate(
|
||||||
|
countryOptions.length,
|
||||||
|
(index) => Center(
|
||||||
|
child: Text(
|
||||||
|
countryOptions[index]
|
||||||
|
.tr, // Display translated if not English
|
||||||
|
style: AppStyle.title,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
MyElevatedButton(
|
||||||
|
title:
|
||||||
|
'Select Country'.tr, // Use translated text for button
|
||||||
|
onPressed: () async {
|
||||||
|
// No conversion needed
|
||||||
|
box.write(
|
||||||
|
BoxName.countryCode, //
|
||||||
|
controller
|
||||||
|
.selectedCountry); // Already saved in English
|
||||||
|
Get.snackbar(controller.selectedCountry.toString().tr, '',
|
||||||
|
backgroundColor: AppColor.greenColor);
|
||||||
|
// Get.back();//
|
||||||
|
// Get.back();
|
||||||
|
},
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
})
|
||||||
|
],
|
||||||
|
isleading: true)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
class CountryPickerFromSetting extends StatelessWidget {
|
class CountryPickerFromSetting extends StatelessWidget {
|
||||||
final ProfileController controller = Get.put(ProfileController());
|
final ProfileController controller = Get.put(ProfileController());
|
||||||
final LoginController loginController = Get.put(LoginController());
|
final LoginController loginController = Get.put(LoginController());
|
||||||
@@ -462,8 +548,7 @@ class CountryPickerFromSetting extends StatelessWidget {
|
|||||||
MyElevatedButton(
|
MyElevatedButton(
|
||||||
title: 'Select Country'.tr, // Use translated text for button
|
title: 'Select Country'.tr, // Use translated text for button
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
loginController.saveCountryCode(controller.selectedCountry
|
// No conversion needed
|
||||||
.toString()); // No conversion needed
|
|
||||||
box.write(
|
box.write(
|
||||||
BoxName.countryCode, //
|
BoxName.countryCode, //
|
||||||
controller.selectedCountry); // Already saved in English
|
controller.selectedCountry); // Already saved in English
|
||||||
|
|||||||
@@ -1733,7 +1733,7 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.0"
|
version: "0.7.0"
|
||||||
timezone:
|
timezone:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: timezone
|
name: timezone
|
||||||
sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d"
|
sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d"
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ dependencies:
|
|||||||
package_info_plus: ^8.0.0
|
package_info_plus: ^8.0.0
|
||||||
uni_links: ^0.5.1
|
uni_links: ^0.5.1
|
||||||
googleapis_auth: ^1.6.0
|
googleapis_auth: ^1.6.0
|
||||||
|
timezone: ^0.9.4
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user