Files
intaleq/lib/views/home/map_widget.dart/cash_confirm_bottom_page.dart
Hamza-Ayed 6c87f7291d 25-9-1-1
2025-09-01 18:29:05 +03:00

208 lines
8.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:Intaleq/constant/box_name.dart';
import 'package:Intaleq/constant/style.dart';
import 'package:Intaleq/views/home/my_wallet/passenger_wallet.dart';
import '../../../constant/colors.dart';
import '../../../constant/info.dart';
import '../../../controller/home/map_passenger_controller.dart';
import '../../../controller/payment/payment_controller.dart';
import '../../../main.dart';
import '../../widgets/elevated_btn.dart';
class CashConfirmPageShown extends StatelessWidget {
CashConfirmPageShown({super.key});
final PaymentController paymentController = Get.put(PaymentController());
@override
Widget build(BuildContext context) {
return GetBuilder<MapPassengerController>(builder: (controller) {
// شرط الإظهار الرئيسي لم يتغير
return Positioned(
bottom: 0,
left: 0,
right: 0,
child: AnimatedContainer(
duration: const Duration(milliseconds: 300),
curve: Curves.easeInOut,
// التحكم في ظهور اللوحة لم يتغير
transform: Matrix4.translationValues(
0, controller.isCashConfirmPageShown ? 0 : Get.height, 0),
decoration: BoxDecoration(
color: AppColor.secondaryColor,
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(24),
topRight: Radius.circular(24),
),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.2),
blurRadius: 20,
),
],
),
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// --- 1. رأس الصفحة ---
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Payment Method'.tr,
style: AppStyle.headTitle.copyWith(fontSize: 24),
),
// زر الإغلاق (كان معلقاً في الكود القديم، تم تفعيله هنا)
IconButton(
onPressed: () => controller.changeCashConfirmPageShown(),
icon: const Icon(Icons.close, color: AppColor.writeColor),
),
],
),
const SizedBox(height: 16),
// --- 2. بطاقات اختيار الدفع ---
GetBuilder<PaymentController>(builder: (paymentCtrl) {
// نفس منطق تغيير اللون للسيارات النسائية
final bool isLadyRide = box.read(BoxName.carType) == 'Lady' ||
box.read(BoxName.carType) == 'Pink Bike';
final Color selectedColor =
isLadyRide ? Colors.pink.shade300 : AppColor.primaryColor;
return Column(
children: [
// بطاقة المحفظة
_buildPaymentOptionCard(
icon: Icons.account_balance_wallet_outlined,
title: '${AppInformation.appName} Balance'.tr,
subtitle:
'${'Balance:'.tr} ${box.read(BoxName.passengerWalletTotal) ?? '0.0'} ${'SYP'.tr}',
isSelected: paymentCtrl.isWalletChecked,
selectedColor: selectedColor,
onTap: () =>
paymentCtrl.onChangedPaymentMethodWallet(true),
),
const SizedBox(height: 12),
// بطاقة الكاش
_buildPaymentOptionCard(
icon: Icons.money_rounded,
title: 'Cash'.tr,
subtitle: 'Pay directly to the captain'.tr,
isSelected: paymentCtrl.isCashChecked,
selectedColor: selectedColor,
onTap: () =>
paymentCtrl.onChangedPaymentMethodCash(true),
),
],
);
}),
const SizedBox(height: 24),
// --- 3. أزرار التأكيد (بنفس منطقك القديم تماماً) ---
GetBuilder<PaymentController>(builder: (paymentCtrl) {
final bool isWalletSufficient = (double.tryParse(
box.read(BoxName.passengerWalletTotal) ?? '0') ??
0) >=
controller.totalPassenger;
// إذا تم اختيار المحفظة والرصيد غير كافٍ
if (paymentCtrl.isWalletChecked && !isWalletSufficient) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
MyElevatedButton(
title: 'Top up Balance to continue'.tr,
onPressed: () =>
Get.to(() => const PassengerWallet()),
kolor: AppColor.redColor,
),
const SizedBox(height: 8),
TextButton(
onPressed: () =>
paymentCtrl.onChangedPaymentMethodCash(true),
child: Text("Or pay with Cash instead".tr,
style: TextStyle(color: AppColor.primaryColor)),
)
],
);
}
// في كل الحالات الأخرى (كاش، أو محفظة برصيد كافٍ)
else {
return MyElevatedButton(
title: 'Confirm & Find a Ride'.tr,
onPressed: () {
// --- نفس منطقك القديم بالضبط ---
controller.changeCashConfirmPageShown();
controller.isSearchingWindow = true;
controller.confirmRideForAllDriverAvailable();
controller.update();
},
);
}
}),
],
),
),
),
);
});
}
// --- ويدجت مساعدة لبناء بطاقة الدفع ---
Widget _buildPaymentOptionCard({
required IconData icon,
required String title,
required String subtitle,
required bool isSelected,
required VoidCallback onTap,
required Color selectedColor,
}) {
return GestureDetector(
onTap: onTap,
child: AnimatedContainer(
duration: const Duration(milliseconds: 250),
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: isSelected
? selectedColor.withOpacity(0.1)
: AppColor.writeColor.withOpacity(0.05),
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: isSelected
? selectedColor
: AppColor.writeColor.withOpacity(0.2),
width: isSelected ? 2.0 : 1.0,
),
),
child: Row(
children: [
Icon(icon,
color: isSelected ? selectedColor : AppColor.writeColor,
size: 28),
const SizedBox(width: 16),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(title,
style:
AppStyle.title.copyWith(fontWeight: FontWeight.bold)),
Text(subtitle,
style: AppStyle.subtitle.copyWith(
color: AppColor.writeColor.withOpacity(0.7))),
],
),
),
if (isSelected)
Icon(Icons.check_circle_rounded, color: selectedColor, size: 24),
],
),
),
);
}
}