diff --git a/.env b/.env index 6e03726..a5bc609 100644 --- a/.env +++ b/.env @@ -20,7 +20,7 @@ seferPaymentServer=https://seferpw.shop/sefer seferCairoServer=https://sefer.click/sefer seferGizaServer=https://gizasefer.online/sefer whatappID=369939736211879 -whatsapp=EAAOtbZBSUK74BO6yE1QwIBsRCjPDANdum66xap0ZA7OZA8LqEu8MZAts1kwr12eRiNXtvpJ2ZAFSY5dw3KVSyrUuH8boLjynxdFI4Gh1Q7BCHx275X2uZBwKWZCSrsVN17i6mZAFNYYd25sQv0ZBomeTk02ZCIJot4UqWxK9ZBvxsq1k2yS7lD2NsjZB5EHbpaYGLzxFJ2FCCSX6iHyKXab6ckfK7m19wo77in7Dl3YZD +whatsapp=EAAOtbZBSUK74BO3mbLwnnn5GsZBc5uAMHgbDGpyi3C0vDI8ZBWZBzN8HUwXePwisopEgyIGcNfZCNQ8RZAJEdmw58D1qgX5hsbfh9XDsIfFG2yKrVXYbPm5zClUbJMHSHAmtTNkfPkzK7AEvOp2KzZADkkqq5QDzk1iDcauULdEDkmxcCz4HDiYeGOEmPVXFr55zK24sHSGZBFDdqtkunHCZCyCShcj1Gg9GomWRi2NEZD cohere=Aulwd8y5SPWos0hJhG0toUf8gOhUUrpf5Q2TPmVGXrXlBl claudeAiAPI=zg-qbc-qvo39-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl payPalClientId=QALymfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl diff --git a/android/app/build.gradle b/android/app/build.gradle index 701a177..15619f0 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -148,8 +148,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdk = 23 targetSdk = flutter.targetSdkVersion - versionCode = 70 - versionName = '1.5.70' + versionCode = 71 + versionName = '1.5.71' multiDexEnabled =true // manifestPlaceholders can be specified here if needed diff --git a/android/app/src/main/res/raw/app_icon.png b/android/app/src/main/res/raw/app_icon.png new file mode 100644 index 0000000..96cc55a Binary files /dev/null and b/android/app/src/main/res/raw/app_icon.png differ diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 908e1d5..fccf2e6 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -1,101 +1,101 @@ - - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLSchemes - - com.googleusercontent.apps.594687661098-8e26699cris2k3nj5msj1osi59it9kpf - - - - LSApplicationQueriesSchemes - - googlechromes - comgooglemaps - - CADisableMinimumFrameDurationOnPhone - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Sefer - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleGetInfoString - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Sefer - CFBundlePackageType - APPL - CFBundleShortVersionString - 48 - CFBundleSignature - ???? - CFBundleVersion - 4.3.48 - FirebaseAppDelegateProxyEnabled - NO - GMSApiKey - YOUR_API_KEY - LSApplicationCategoryType - - LSRequiresIPhoneOS - - NSCameraUsageDescription - Sefer app requires access to your camera in order to scan QR codes and capture + + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.594687661098-8e26699cris2k3nj5msj1osi59it9kpf + + + + LSApplicationQueriesSchemes + + googlechromes + comgooglemaps + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Sefer + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleGetInfoString + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Sefer + CFBundlePackageType + APPL + CFBundleShortVersionString + 52 + CFBundleSignature + ???? + CFBundleVersion + 4.3.52 + FirebaseAppDelegateProxyEnabled + NO + GMSApiKey + YOUR_API_KEY + LSApplicationCategoryType + + LSRequiresIPhoneOS + + NSCameraUsageDescription + Sefer app requires access to your camera in order to scan QR codes and capture images for uploading and access to connect to a call. - NSFaceIDUsageDescription - Use Face ID to securely authenticate payment accounts. - NSLocationAlwaysAndWhenInUseUsageDescription - This app needs access to your location to provide you with the best ride experience. + NSFaceIDUsageDescription + Use Face ID to securely authenticate payment accounts. + NSLocationAlwaysAndWhenInUseUsageDescription + This app needs access to your location to provide you with the best ride experience. Your location data will be used to find the nearest available cars and connect you with the closest captain for efficient and convenient rides. - NSLocationAlwaysUsageDescription - This app needs access to location. - NSLocationWhenInUseUsageDescription - This app needs access to your location to provide you with the best ride experience. + NSLocationAlwaysUsageDescription + This app needs access to location. + NSLocationWhenInUseUsageDescription + This app needs access to your location to provide you with the best ride experience. Your location data will be used to find the nearest available cars and connect you with the closest captain for efficient and convenient rides. - NSMicrophoneUsageDescription - This app requires access to your microphone to record audio, allowing you to add + NSMicrophoneUsageDescription + This app requires access to your microphone to record audio, allowing you to add voice recordings to your photos and videos and access to connect to a call. - NSPhotoLibraryUsageDescription - Explanation of why your app needs access to the photo library. - UIApplicationSupportsIndirectInputEvents - - UIBackgroundModes - - fetch - location - remote-notification - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - \ No newline at end of file + NSPhotoLibraryUsageDescription + Explanation of why your app needs access to the photo library. + UIApplicationSupportsIndirectInputEvents + + UIBackgroundModes + + fetch + location + remote-notification + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/lib/constant/links.dart b/lib/constant/links.dart index a661486..a06a4c4 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -189,6 +189,8 @@ class AppLink { static String getCarsLocationByPassengerSpeed = "$location/getSpeed.php"; static String getCarsLocationByPassengerComfort = "$location/getComfort.php"; static String getCarsLocationByPassengerBalash = "$location/getBalash.php"; + static String getCarsLocationByPassengerPinkBike = + "$location/getPinkBike.php"; static String getCarsLocationByPassengerDelivery = "$location/getDelivery.php"; static String getLocationParents = "$location/getLocationParents.php"; diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart index adaead2..ebaba41 100644 --- a/lib/controller/firebase/firbase_messge.dart +++ b/lib/controller/firebase/firbase_messge.dart @@ -429,7 +429,7 @@ class FirebaseMessagesController extends GetxController { )); } - void sendNotificationAll(String title, body) async { + void sendNotificationAll(String title, body, tone) async { // Get the token you want to subtract. String token = box.read(BoxName.tokenFCM); tokens = box.read(BoxName.tokens); @@ -441,25 +441,41 @@ class FirebaseMessagesController extends GetxController { tokens = box.read(BoxName.tokens); for (var i = 0; i < tokens.length; i++) { http - .post(Uri.parse('https://fcm.googleapis.com/fcm/send'), - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'key=${AK.serverAPI}' - }, - body: jsonEncode({ - 'notification': { + .post( + Uri.parse('https://fcm.googleapis.com/fcm/send'), + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'key=${AK.serverAPI}' + }, + body: jsonEncode({ + 'message': { + 'token': token, + 'notification': { 'title': title, 'body': body, - 'sound': 'ding.wav' }, - 'priority': 'high', - 'data': { - 'click_action': 'FLUTTER_NOTIFICATION_CLICK', - 'id': '1', - 'status': 'done' + // 'data': { + // 'DriverList': jsonEncode(data), + // }, + 'android': { + 'priority': 'high', // Set priority to high + 'notification': { + 'sound': tone, + }, }, - 'to': tokens[i], - })) + 'apns': { + 'headers': { + 'apns-priority': '10', // Set APNs priority to 10 + }, + 'payload': { + 'aps': { + 'sound': tone, + }, + }, + }, + }, + }), + ) .whenComplete(() {}) .catchError((e) {}); } @@ -533,11 +549,15 @@ class FirebaseMessagesController extends GetxController { 'body': body, }, 'android': { + 'priority': 'high', // Set priority to high 'notification': { 'sound': tone, }, }, 'apns': { + 'headers': { + 'apns-priority': '10', // Set APNs priority to 10 + }, 'payload': { 'aps': { 'sound': tone, @@ -603,11 +623,15 @@ class FirebaseMessagesController extends GetxController { 'body': body, }, 'android': { + 'priority': 'high', // Set priority to high 'notification': { 'sound': tone, }, }, 'apns': { + 'headers': { + 'apns-priority': '10', // Set APNs priority to 10 + }, 'payload': { 'aps': { 'sound': tone, @@ -716,11 +740,15 @@ class FirebaseMessagesController extends GetxController { 'DriverList': jsonEncode(data), }, 'android': { + 'priority': 'high', // Set priority to high 'notification': { 'sound': tone, }, }, 'apns': { + 'headers': { + 'apns-priority': '10', // Set APNs priority to 10 + }, 'payload': { 'aps': { 'sound': tone, @@ -746,7 +774,7 @@ class FirebaseMessagesController extends GetxController { } void sendNotificationToDriverMapPolyline(String title, String body, - String token, List data, String polylineJson) async { + String token, List data, String polylineJson, String tone) async { try { String serviceAccountKeyJson = '''{ "type": "service_account", @@ -778,18 +806,32 @@ class FirebaseMessagesController extends GetxController { 'Authorization': 'Bearer $accessToken', }, body: jsonEncode({ - 'notification': { - 'title': title, - 'body': body, - // 'sound': 'tone2.wav', - 'sound': 'order.wav' + 'message': { + 'token': token, + 'notification': { + 'title': title, + 'body': body, + }, + 'data': { + 'DriverList': jsonEncode(data), + }, + 'android': { + 'priority': 'high', // Set priority to high + 'notification': { + 'sound': tone, + }, + }, + 'apns': { + 'headers': { + 'apns-priority': '10', // Set APNs priority to 10 + }, + 'payload': { + 'aps': { + 'sound': tone, + }, + }, + }, }, - 'data': { - 'DriverList': data, - 'PolylineJson': polylineJson, - }, - 'priority': 'high', - 'to': token, }), ); diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart index 3eb764e..ae93a0c 100644 --- a/lib/controller/home/map_passenger_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -1017,10 +1017,10 @@ class MapPassengerController extends GetxController { late String make = ''; late String licensePlate = ''; confirmRideForFirstDriver() async { - startCarLocationSearch(box.read(BoxName.carType)); + // startCarLocationSearch(box.read(BoxName.carType)); // await getCarsLocationByPassengerAndReloadMarker( - // box.read(BoxName.carType), 7000); - await getNearestDriverByPassengerLocationAPIGOOGLE(); + // box.read(BoxName.carType), 7000); + // await getNearestDriverByPassengerLocationAPIGOOGLE(); Log.print('dataCarsLocationByPassenger: ${dataCarsLocationByPassenger}'); if (dataCarsLocationByPassenger != 'failure' || dataCarsLocationByPassenger != null) { @@ -1258,12 +1258,8 @@ class MapPassengerController extends GetxController { ]; Log.print('body: ${body}'); for (var i = 1; i < driversToken.length; i++) { - FirebaseMessagesController().sendNotificationToDriverMapPolyline( - 'OrderSpeed', - rideId.toString(), - driversToken[i], - body, - polylineCoordinates.toString()); + FirebaseMessagesController().sendNotificationToDriverMAP('OrderSpeed', + rideId.toString(), driversToken[i], body, 'order.wav'); } (rideId); @@ -1291,6 +1287,8 @@ class MapPassengerController extends GetxController { if (res.toString() == 'waiting' && tick >= 15) { timer.cancel(); // Stop the current timer showAndResearchForCaptain(); + //TODO add to wait + confirmRideForAllDriverAvailable(); // delayAndFetchRideStatusForAllDriverAvailable(rideId); } else if (res.toString() == 'Apply') { // todo play sound @@ -1314,7 +1312,9 @@ class MapPassengerController extends GetxController { // No need to recall delayAndFetchRideStatus as Timer.periodic is already running update(); // } - tick++; + if (tick < 19) { + tick++; + } } else { timer.cancel(); // Stop the timer if remainingTimeToPassengerFromDriverAfterApplied <= 0 @@ -1343,7 +1343,7 @@ class MapPassengerController extends GetxController { Log.print('tick delayAndFetchRideStatusForAllDriverAvailable: ${tick}'); void fetchRideStatus() async { - if (attemptCounter < maxAttempts && !isApplied && tick < 20) { + if (attemptCounter < maxAttempts && !isApplied || tick < 20) { attemptCounter++; tick++; var res = await getRideStatus(rideId); @@ -1760,7 +1760,7 @@ class MapPassengerController extends GetxController { 'northeastLon': bounds.northeast.longitude.toString(), }); break; - case 'Delivery': + case 'Scooter': res = await CRUD() .get(link: AppLink.getCarsLocationByPassengerDelivery, payload: { 'southwestLat': bounds.southwest.latitude.toString(), @@ -1778,6 +1778,15 @@ class MapPassengerController extends GetxController { 'northeastLon': bounds.northeast.longitude.toString(), }); break; + case 'Pink Bike': + res = await CRUD() + .get(link: AppLink.getCarsLocationByPassengerPinkBike, payload: { + 'southwestLat': bounds.southwest.latitude.toString(), + 'southwestLon': bounds.southwest.longitude.toString(), + 'northeastLat': bounds.northeast.latitude.toString(), + 'northeastLon': bounds.northeast.longitude.toString(), + }); + break; default: res = await CRUD() .get(link: AppLink.getCarsLocationByPassenger, payload: { @@ -1796,11 +1805,29 @@ class MapPassengerController extends GetxController { } else { noCarString = false; dataCarsLocationByPassenger = jsonDecode(res); - driverId = dataCarsLocationByPassenger['message'][carsOrder] - ['driver_id'] - .toString(); - gender = dataCarsLocationByPassenger['message'][carsOrder]['gender'] - .toString(); + + // Check if 'message' is present and not null + if (dataCarsLocationByPassenger['message'] != null && + dataCarsLocationByPassenger['message'].isNotEmpty) { + // Check if carsOrder is within bounds + if (carsOrder < dataCarsLocationByPassenger['message'].length) { + driverId = dataCarsLocationByPassenger['message'][carsOrder] + ['driver_id'] + .toString(); + gender = dataCarsLocationByPassenger['message'][carsOrder]['gender'] + .toString(); + driverToken = dataCarsLocationByPassenger['message'][carsOrder] + ['token'] + .toString(); + } else { + print('carsOrder is out of bounds for message array'); + return false; + } + } else { + // Get.defaultDialog(title: 'No cars available '); + print('No cars available or message is null'); + return false; + } carsLocationByPassenger.clear(); // Clear existing markers diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart index a5a8b93..72ed9ef 100644 --- a/lib/controller/local/translations.dart +++ b/lib/controller/local/translations.dart @@ -4,6 +4,10 @@ class MyTranslation extends Translations { @override Map> get keys => { "ar": { + "Price of trip": "سعر الرحلة", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "بالنسبة لرحلات السرعة والتوصيل، يتم حساب السعر ديناميكياً. بالنسبة لرحلات الراحة، يتم حساب السعر بناءً على الوقت والمسافة", + "Phone Wallet Saved Successfully": "تم حفظ المحفظة الهاتفية بنجاح", "Add wallet phone you use": "أضف محفظة الهاتف التي تستخدمها", "Update Available": "تحديث متوفر", 'Phone number must be exactly 11 digits long': diff --git a/lib/views/home/map_widget.dart/left_main_menu_icons.dart b/lib/views/home/map_widget.dart/left_main_menu_icons.dart index d004ed5..65478ee 100644 --- a/lib/views/home/map_widget.dart/left_main_menu_icons.dart +++ b/lib/views/home/map_widget.dart/left_main_menu_icons.dart @@ -121,7 +121,50 @@ GetBuilder leftMainMenuIcons() { // borderRadius: BorderRadius.circular(15)), // child: IconButton( // onPressed: () async { - // Get.to(SmsSignupEgypt()); + // // Get.to(SmsSignupEgypt()); + // List d = [ + // "30.003028,31.2419628", + // "30.0955661,31.2665336", + // "160.00", + // "25.92", + // "1488", + // "16.93", + // "114243034311436865474", + // "113172279072358305645", + // "hamza ayed", + // "rlMbi4Hc8L1STMPE99iPKqK4Gddwv8r9qZOCadsz9qTEJZ6KLEE9ruTJI6N8dKfK4CXez5pme5WIs14-1QGo29s07fQOniZgIlJV5XFL3yqzPRSUmn3", + // "+201023248456", + // "1 min", + // "1 m", + // "false", + // "QwUMoyUtZ0J3oR6yXKUavrB_gBl9npUZe-qZtax-Raq4QBbdKv0AmtLKm0BfBd6N_592HBv4CVa41ii4122W3hr-BCUKKzJhzZcK8m0YjbWbtpvgJRD8uD_nuMk9", + // "0", + // "238", + // "false", + // "114243034311436865474", + // "1488", + // "startEnd", + // "30.049307749732176,31.274291574954987", + // "", + // "", + // "", + // "", + // "17.73", + // "0", + // "hamzaayedflutter@gmail.com", + // "الفسطاط، حي مصر القديمة، مصر", + // " الزاوية الحمراء، محافظة القاهرة، مصر", + // "Speed", + // "8", + // "5.00" + // ]; + // FirebaseMessagesController().sendNotificationToDriverMAP( + // 'Order'.tr, + // 'from: ', + // // jsonDecode(value)['message'].toString(), + // 'd3JaCCFAQeu8QTxRnlC1sB:APA91bFuRjbVK32obIFYXFTI4iwsZEPrrgwvPouob2bXivID-W4aXz51J_OIJ2nHpNU2ocOvGLD1Ip65rLViAFx5qHVE-c8FabBwBi5fSQ-lDTQfe36xxKsc9DU-sTyj_FoYrrMnLNVi', + // d, + // 'order.wav'); // }, // icon: const Icon( // Icons.chat, @@ -129,7 +172,7 @@ GetBuilder leftMainMenuIcons() { // ), // ), // ), - // AnimatedContainer( + // // AnimatedContainer( // duration: const Duration(microseconds: 200), // width: controller.widthMapTypeAndTraffic, // decoration: BoxDecoration( diff --git a/lib/views/home/map_widget.dart/ride_begin_passenger.dart b/lib/views/home/map_widget.dart/ride_begin_passenger.dart index 984c2a7..abd71c7 100644 --- a/lib/views/home/map_widget.dart/ride_begin_passenger.dart +++ b/lib/views/home/map_widget.dart/ride_begin_passenger.dart @@ -10,6 +10,7 @@ import 'package:SEFER/main.dart'; import '../../../constant/colors.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/audio_record1.dart'; +import '../../../controller/functions/launch.dart'; import '../../../controller/functions/toast.dart'; import '../../../controller/home/map_passenger_controller.dart'; @@ -248,8 +249,8 @@ class RideBeginPassenger extends StatelessWidget { profileController.prfoileData['sosPhone']); } } else { - controller - .sendSMS(box.read(BoxName.sosPhonePassenger)); + makePhoneCall('122'); + // box.read(BoxName.sosPhonePassenger)); } }, icon: const Icon( diff --git a/lib/views/home/my_wallet/passenger_wallet.dart b/lib/views/home/my_wallet/passenger_wallet.dart index 29c5794..de06b3b 100644 --- a/lib/views/home/my_wallet/passenger_wallet.dart +++ b/lib/views/home/my_wallet/passenger_wallet.dart @@ -6,6 +6,7 @@ import '../../../constant/box_name.dart'; import '../../../constant/colors.dart'; import '../../../constant/info.dart'; import '../../../constant/style.dart'; +import '../../../controller/functions/toast.dart'; import '../../../controller/home/payment/credit_card_controller.dart'; import '../../../controller/payment/payment_controller.dart'; import '../../../main.dart'; @@ -96,6 +97,10 @@ class PassengerWallet extends StatelessWidget { Get.back(); box.write(BoxName.phoneWallet, controller.walletphoneController.text); + Toast.show( + context, + 'Phone Wallet Saved Successfully'.tr, + AppColor.greenColor); }, ), cancel: MyElevatedButton( diff --git a/lib/views/home/my_wallet/passenger_wallet_dialoge.dart b/lib/views/home/my_wallet/passenger_wallet_dialoge.dart index d9ae68d..531ebae 100644 --- a/lib/views/home/my_wallet/passenger_wallet_dialoge.dart +++ b/lib/views/home/my_wallet/passenger_wallet_dialoge.dart @@ -8,6 +8,7 @@ import 'package:SEFER/controller/payment/payment_controller.dart'; import 'package:SEFER/views/widgets/elevated_btn.dart'; import '../../../main.dart'; +import '../../widgets/my_textField.dart'; class PassengerWalletDialog extends StatelessWidget { const PassengerWalletDialog({ @@ -163,92 +164,137 @@ class PassengerWalletDialog extends StatelessWidget { }, ), box.read(BoxName.countryCode) == 'Egypt' - ? Column( - children: [ - MyElevatedButton( - title: '💳 Pay with Credit Card'.tr, + ? box.read(BoxName.phoneWallet) != null + ? Column( + children: [ + MyElevatedButton( + title: '💳 Pay with Credit Card'.tr, + onPressed: () { + if (controller.selectedAmount != 0) { + controller.payWithPayMob( + context, + controller.selectedAmount + .toString(), // Convert int to double + box.read(BoxName.countryCode) == + 'Egypt' + ? 'EGP' + : 'JOD', + () async { + await controller + .addPassengerWallet(); + controller + .changePromoSheetDialogue(); + await controller + .getPassengerWallet(); + }, + ); + } else { + Toast.show( + context, + '⚠️ You need to choose an amount!' + .tr, + AppColor.redColor, + ); + } + }, + ), + // Add some spacing between buttons + MyElevatedButton( + kolor: AppColor.yellowColor, + title: '💰 Pay with Wallet'.tr, + onPressed: () { + if (controller.selectedAmount != 0) { + controller.payWithPayMobWallet( + context, + controller.selectedAmount + .toString(), // Convert int to double + box.read(BoxName.countryCode) == + 'Egypt' + ? 'EGP' + : 'JOD', + () async { + await controller + .addPassengerWallet(); + controller + .changePromoSheetDialogue(); + await controller + .getPassengerWallet(); + }, + ); + } else { + Toast.show( + context, + '⚠️ You need to choose an amount!' + .tr, + AppColor.redColor, + ); + } + }, + ), + ], + ) + : MyElevatedButton( + title: 'Pay with Credit Card'.tr, onPressed: () { if (controller.selectedAmount != 0) { - controller.payWithPayMob( - context, - controller.selectedAmount - .toString(), // Convert int to double - box.read(BoxName.countryCode) == - 'Egypt' - ? 'EGP' - : 'JOD', - () async { - await controller - .addPassengerWallet(); - controller - .changePromoSheetDialogue(); - await controller - .getPassengerWallet(); - }, - ); + controller.makePaymentStripe( + controller.selectedAmount! + .toDouble(), // Convert int to double + box.read(BoxName.countryCode) != + 'Egypt' + ? 'usd' + : 'jod', () { + controller.addPassengerWallet(); + controller.changePromoSheetDialogue(); + controller.getPassengerWallet(); + }); } else { Toast.show( - context, - '⚠️ You need to choose an amount!'.tr, - AppColor.redColor, - ); + context, + 'You will choose one of above !'.tr, + AppColor.redColor); } - }, - ), - // Add some spacing between buttons - MyElevatedButton( - kolor: AppColor.yellowColor, - title: '💰 Pay with Wallet'.tr, - onPressed: () { - if (controller.selectedAmount != 0) { - controller.payWithPayMobWallet( - context, - controller.selectedAmount - .toString(), // Convert int to double - box.read(BoxName.countryCode) == - 'Egypt' - ? 'EGP' - : 'JOD', - () async { - await controller - .addPassengerWallet(); - controller - .changePromoSheetDialogue(); - await controller - .getPassengerWallet(); - }, - ); - } else { - Toast.show( - context, - '⚠️ You need to choose an amount!'.tr, - AppColor.redColor, - ); - } - }, - ), - ], - ) + }) : MyElevatedButton( - title: 'Pay with Credit Card'.tr, + kolor: AppColor.deepPurpleAccent, + title: "Add wallet phone you use".tr, onPressed: () { - if (controller.selectedAmount != 0) { - controller.makePaymentStripe( - controller.selectedAmount! - .toDouble(), // Convert int to double - box.read(BoxName.countryCode) != 'Egypt' - ? 'usd' - : 'jod', () { - controller.addPassengerWallet(); - controller.changePromoSheetDialogue(); - controller.getPassengerWallet(); - }); - } else { - Toast.show( - context, - 'You will choose one of above !'.tr, - AppColor.redColor); - } + Get.defaultDialog( + barrierDismissible: false, + title: 'Insert Wallet phone number'.tr, + content: Form( + key: controller.formKey, + child: MyTextForm( + controller: controller + .walletphoneController, + label: + 'Insert Wallet phone number' + .tr, + hint: 'Insert Wallet phone number' + .tr, + type: TextInputType.phone)), + confirm: MyElevatedButton( + kolor: AppColor.greenColor, + title: 'OK'.tr, + onPressed: () async { + Get.back(); + box.write( + BoxName.phoneWallet, + controller + .walletphoneController.text); + Toast.show( + context, + 'Phone Wallet Saved Successfully' + .tr, + AppColor.greenColor); + }, + ), + cancel: MyElevatedButton( + title: 'Cancel'.tr, + kolor: AppColor.redColor, + onPressed: () { + Get.back(); + })); }), MyElevatedButton( title: 'Cancel'.tr,