import 'package:Tripz/constant/style.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:Tripz/constant/box_name.dart'; import 'package:Tripz/constant/colors.dart'; import 'package:Tripz/controller/functions/toast.dart'; import 'package:Tripz/controller/payment/payment_controller.dart'; import '../../../main.dart'; class PassengerWalletDialog extends StatelessWidget { const PassengerWalletDialog({ super.key, }); @override Widget build(BuildContext context) { return GetBuilder( builder: (controller) => Positioned( top: Get.height * .1, right: Get.width * .15, left: Get.width * .15, bottom: Get.height * .1, child: controller.isPromoSheetDialogue ? CupertinoActionSheet( title: Text('Select Payment Amount'.tr), actions: [ CupertinoActionSheetAction( onPressed: () { controller.updateSelectedAmount( box.read(BoxName.countryCode) == 'Egypt' ? 100 : 10, ); showPaymentOptions(context, controller); }, child: Text( box.read(BoxName.countryCode) == 'Egypt' ? '100 ${'LE'.tr}' : '10 ${'JOD'.tr}', ), ), CupertinoActionSheetAction( onPressed: () { controller.updateSelectedAmount( box.read(BoxName.countryCode) == 'Egypt' ? 200 : 20, ); showPaymentOptions(context, controller); }, child: Text( box.read(BoxName.countryCode) == 'Egypt' ? '200 ${'LE'.tr} = 205 ${'LE'.tr}' : '20 ${'JOD'.tr}', ), ), CupertinoActionSheetAction( onPressed: () { controller.updateSelectedAmount( box.read(BoxName.countryCode) == 'Egypt' ? 400 : 40, ); showPaymentOptions(context, controller); }, child: Text( box.read(BoxName.countryCode) == 'Egypt' ? '400 ${'LE'.tr} = 415 ${'LE'.tr}' : '40 ${'JOD'.tr}', ), ), CupertinoActionSheetAction( onPressed: () { controller.updateSelectedAmount( box.read(BoxName.countryCode) == 'Egypt' ? 1000 : 50, ); showPaymentOptions(context, controller); }, child: Text( box.read(BoxName.countryCode) == 'Egypt' ? '1000 ${'LE'.tr} = 1100 ${'LE'.tr}' : '50 ${'JOD'.tr}', ), ), ], cancelButton: CupertinoActionSheetAction( onPressed: () { controller.changePromoSheetDialogue(); }, child: Text('Cancel'.tr), ), ) : const SizedBox(), ), ); } } // class PassengerWalletDialog extends StatelessWidget { // const PassengerWalletDialog({ // super.key, // }); // @override // Widget build(BuildContext context) { // return GetBuilder( // builder: (controller) { // return Positioned( // top: Get.height * .1, // right: Get.width * .15, // left: Get.width * .15, // bottom: Get.height * .1, // child: controller.isPromoSheetDialogue // ? Container() // : SizedBox // .shrink(), // If condition is false, return an empty widget // ); // }, // ); // } // } void showPaymentBottomSheet(BuildContext context) { final controller = Get.find(); showModalBottomSheet( context: context, isScrollControlled: true, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.vertical(top: Radius.circular(15.0)), ), builder: (BuildContext context) { return WillPopScope( onWillPop: () async { Get.back(); return false; }, child: Container( padding: const EdgeInsets.all(16.0), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Text( 'Select Payment Amount'.tr, style: AppStyle.headTitle2, textAlign: TextAlign.center, ), const SizedBox(height: 16.0), // Payment Options List _buildPaymentOption( context: context, controller: controller, amount: box.read(BoxName.countryCode) == 'Egypt' ? 100 : 10, bonusAmount: 0, currency: box.read(BoxName.countryCode) == 'Egypt' ? 'LE'.tr : 'JOD'.tr, ), const SizedBox(height: 8.0), _buildPaymentOption( context: context, controller: controller, amount: box.read(BoxName.countryCode) == 'Egypt' ? 200 : 20, bonusAmount: box.read(BoxName.countryCode) == 'Egypt' ? 5 : 1, currency: box.read(BoxName.countryCode) == 'Egypt' ? 'LE'.tr : 'JOD'.tr, ), const SizedBox(height: 8.0), _buildPaymentOption( context: context, controller: controller, amount: box.read(BoxName.countryCode) == 'Egypt' ? 400 : 40, bonusAmount: box.read(BoxName.countryCode) == 'Egypt' ? 15 : 2.5, currency: box.read(BoxName.countryCode) == 'Egypt' ? 'LE'.tr : 'JOD'.tr, ), const SizedBox(height: 8.0), _buildPaymentOption( context: context, controller: controller, amount: box.read(BoxName.countryCode) == 'Egypt' ? 1000 : 50, bonusAmount: box.read(BoxName.countryCode) == 'Egypt' ? 100 : 6, currency: box.read(BoxName.countryCode) == 'Egypt' ? 'LE'.tr : 'JOD'.tr, ), const SizedBox(height: 16.0), TextButton( onPressed: () => Get.back(), child: Text('Cancel'.tr), ), ], ), ), ); }, ); } Widget _buildPaymentOption({ required BuildContext context, required PaymentController controller, required int amount, required double bonusAmount, required String currency, }) { return Material( color: Colors.transparent, child: InkWell( onTap: () { controller.updateSelectedAmount(amount); Get.back(); showPaymentOptions(context, controller); }, child: Container( padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 16.0), decoration: BoxDecoration( border: Border.all(color: Colors.grey[300]!), borderRadius: BorderRadius.circular(8.0), ), child: Text( bonusAmount > 0 ? '${'Pay'.tr} $amount $currency, ${'Get'.tr} ${amount + bonusAmount} $currency' : '$amount $currency', style: AppStyle.title, textAlign: TextAlign.center, ), ), ), ); } void showPaymentOptions(BuildContext context, PaymentController controller) { showCupertinoModalPopup( context: context, builder: (context) => CupertinoActionSheet( title: Text('Payment Options'.tr), actions: [ box.read(BoxName.countryCode) == 'Egypt' ? CupertinoActionSheetAction( child: Text('💳 Pay with Credit Card'.tr), onPressed: () { if (controller.selectedAmount != 0) { controller.payWithPayMob( context, controller.selectedAmount.toString(), 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); } }, ) : const SizedBox(), box.read(BoxName.countryCode) != 'Egypt' ? CupertinoActionSheetAction( child: Text('Pay with PayPal'.tr), onPressed: () { if (controller.selectedAmount != 0) { controller.makePaymentPayPal(context); } else { Toast.show(context, 'You will choose one of above!'.tr, AppColor.redColor); } }, ) : const SizedBox(), box.read(BoxName.phoneWallet) != null ? CupertinoActionSheetAction( child: Text('💰 Pay with Wallet'.tr), onPressed: () { if (controller.selectedAmount != 0) { controller.isLoading = true; controller.update(); controller.payWithPayMobWallet( context, controller.selectedAmount.toString(), box.read(BoxName.countryCode) == 'Egypt' ? 'EGP' : 'JOD', () async { await controller.addPassengerWallet(); controller.changePromoSheetDialogue(); await controller.getPassengerWallet(); }, ); controller.isLoading = false; controller.update(); } else { Toast.show(context, '⚠️ You need to choose an amount!'.tr, AppColor.redColor); } }, ) : CupertinoActionSheetAction( child: Text('Add wallet phone you use'.tr), onPressed: () { Get.dialog( CupertinoAlertDialog( title: Text('Insert Wallet phone number'.tr), content: Column( children: [ const SizedBox(height: 10), CupertinoTextField( controller: controller.walletphoneController, placeholder: 'Insert Wallet phone number'.tr, keyboardType: TextInputType.phone, padding: const EdgeInsets.symmetric( vertical: 12, horizontal: 10, ), ), ], ), actions: [ CupertinoDialogAction( child: Text('Cancel'.tr, style: const TextStyle( color: CupertinoColors.destructiveRed)), onPressed: () { Get.back(); }, ), CupertinoDialogAction( child: Text('OK'.tr, style: const TextStyle( color: CupertinoColors.activeGreen)), onPressed: () async { Get.back(); box.write(BoxName.phoneWallet, controller.walletphoneController.text); Toast.show( context, 'Phone Wallet Saved Successfully'.tr, AppColor.greenColor); }, ), ], ), barrierDismissible: false, ); }, ), ], cancelButton: CupertinoActionSheetAction( child: Text('Cancel'.tr), onPressed: () { // controller.changePromoSheetDialogue(); Get.back(); }, ), ), ); }