261 lines
9.6 KiB
Dart
261 lines
9.6 KiB
Dart
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:Intaleq/views/home/my_wallet/payment_history_passenger_page.dart';
|
|
import 'dart:ui'; // لاستخدام تأثيرات متقدمة
|
|
|
|
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';
|
|
import '../../widgets/elevated_btn.dart';
|
|
import '../../widgets/my_scafold.dart';
|
|
import 'passenger_wallet_dialoge.dart';
|
|
|
|
// --- الويدجت الرئيسية بالتصميم الجديد ---
|
|
class PassengerWallet extends StatelessWidget {
|
|
const PassengerWallet({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
// نفس منطق استدعاء الكنترولرز
|
|
Get.put(PaymentController());
|
|
Get.put(CreditCardController());
|
|
|
|
return MyScafolld(
|
|
title: 'My Balance'.tr,
|
|
isleading: true,
|
|
body: [
|
|
// استخدام Stack فقط لعرض الـ Dialog فوق المحتوى عند الحاجة
|
|
Stack(
|
|
children: [
|
|
// استخدام Column لتنظيم المحتوى بشكل أفضل
|
|
Padding(
|
|
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
children: [
|
|
const SizedBox(height: 16),
|
|
|
|
// --- 1. بطاقة المحفظة العصرية ---
|
|
_buildModernWalletCard(),
|
|
|
|
const SizedBox(height: 32),
|
|
Text("Actions".tr,
|
|
style: AppStyle.title.copyWith(
|
|
color: AppColor.writeColor.withOpacity(0.6))),
|
|
const Divider(height: 24),
|
|
|
|
// --- 2. قائمة الخيارات المنظمة ---
|
|
_buildActionTile(
|
|
icon: Icons.add_card_rounded,
|
|
title: 'Top up Balance'.tr,
|
|
subtitle: 'Add funds using our secure methods'.tr,
|
|
onTap: () =>
|
|
showPaymentBottomSheet(context), // نفس دالتك القديمة
|
|
),
|
|
_buildActionTile(
|
|
icon: Icons.history_rounded,
|
|
title: 'Payment History'.tr,
|
|
subtitle: 'View your past transactions'.tr,
|
|
onTap: () => Get.to(
|
|
() => const PaymentHistoryPassengerPage(),
|
|
transition: Transition.rightToLeftWithFade),
|
|
),
|
|
_buildActionTile(
|
|
icon: Icons.phone_iphone_rounded,
|
|
title: 'Set Phone Number'.tr,
|
|
subtitle: 'Link a phone number for transfers'.tr,
|
|
onTap: () => _showWalletPhoneDialog(context,
|
|
Get.find<PaymentController>()), // نفس دالتك القديمة
|
|
),
|
|
],
|
|
),
|
|
),
|
|
|
|
// --- عرض الـ Dialog بنفس طريقتك القديمة ---
|
|
const PassengerWalletDialog(),
|
|
],
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
// --- ويدجت مساعدة لبناء بطاقة المحفظة ---
|
|
Widget _buildModernWalletCard() {
|
|
return GetBuilder<PaymentController>(
|
|
builder: (paymentController) {
|
|
return Container(
|
|
width: double.infinity,
|
|
height: Get.height * 0.25,
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(20),
|
|
gradient: const LinearGradient(
|
|
colors: [
|
|
AppColor.primaryColor,
|
|
Color(0xFF1E3A8A)
|
|
], // تدرج لوني أنيق
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight,
|
|
),
|
|
boxShadow: [
|
|
BoxShadow(
|
|
color: AppColor.primaryColor.withOpacity(0.3),
|
|
blurRadius: 25,
|
|
offset: const Offset(0, 10),
|
|
),
|
|
],
|
|
),
|
|
child: Stack(
|
|
children: [
|
|
// --- عنصر تزييني (شكل موجة) ---
|
|
Positioned(
|
|
right: -100,
|
|
bottom: -100,
|
|
child: Icon(
|
|
Icons.waves,
|
|
size: 250,
|
|
color: Colors.white.withOpacity(0.05),
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.all(24.0),
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(
|
|
'${AppInformation.appName} ${'Balance'.tr}',
|
|
style: AppStyle.headTitle.copyWith(
|
|
color: Colors.white,
|
|
fontSize: 20,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
Icon(Icons.memory_rounded,
|
|
color: Colors.white.withOpacity(0.7),
|
|
size: 30), // أيقونة الشريحة
|
|
],
|
|
),
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text(
|
|
"Current Balance".tr,
|
|
style: AppStyle.subtitle
|
|
.copyWith(color: Colors.white.withOpacity(0.7)),
|
|
),
|
|
Text(
|
|
'${box.read(BoxName.passengerWalletTotal) ?? '0.0'} ${'SYP'.tr}',
|
|
style: AppStyle.headTitle2.copyWith(
|
|
color: Colors.white,
|
|
fontSize: 28,
|
|
fontWeight: FontWeight.w600,
|
|
letterSpacing: 1.5,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.end,
|
|
children: [
|
|
Text(
|
|
(box.read(BoxName.name) ?? "User Name").toString(),
|
|
style: AppStyle.title.copyWith(
|
|
color: Colors.white.withOpacity(0.8),
|
|
fontSize: 16,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
// --- ويدجت مساعدة لبناء عناصر القائمة ---
|
|
Widget _buildActionTile({
|
|
required IconData icon,
|
|
required String title,
|
|
required String subtitle,
|
|
required VoidCallback onTap,
|
|
}) {
|
|
return ListTile(
|
|
onTap: onTap,
|
|
contentPadding: const EdgeInsets.symmetric(vertical: 8, horizontal: 8),
|
|
leading: Container(
|
|
padding: const EdgeInsets.all(10),
|
|
decoration: BoxDecoration(
|
|
color: AppColor.primaryColor.withOpacity(0.1),
|
|
borderRadius: BorderRadius.circular(12),
|
|
),
|
|
child: Icon(icon, color: AppColor.primaryColor, size: 24),
|
|
),
|
|
title: Text(title.tr, style: AppStyle.title),
|
|
subtitle: Text(subtitle.tr,
|
|
style: AppStyle.subtitle
|
|
.copyWith(color: AppColor.writeColor.withOpacity(0.6))),
|
|
trailing: const Icon(Icons.arrow_forward_ios_rounded,
|
|
size: 16, color: AppColor.writeColor),
|
|
);
|
|
}
|
|
|
|
// --- نفس دالة الـ Dialog الخاصة بك ---
|
|
void _showWalletPhoneDialog(
|
|
BuildContext context, PaymentController controller) {
|
|
Get.dialog(
|
|
CupertinoAlertDialog(
|
|
title: Text('Insert Wallet phone number'.tr),
|
|
content: Column(
|
|
children: [
|
|
const SizedBox(height: 10),
|
|
Form(
|
|
key: controller.formKey,
|
|
child: CupertinoTextField(
|
|
controller: controller.walletphoneController,
|
|
placeholder: 'Insert Wallet phone number'.tr,
|
|
keyboardType: TextInputType.phone,
|
|
padding:
|
|
const EdgeInsets.symmetric(vertical: 12, horizontal: 10),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
actions: <Widget>[
|
|
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: () {
|
|
Get.back();
|
|
box.write(
|
|
BoxName.phoneWallet, (controller.walletphoneController.text));
|
|
Toast.show(context, 'Phone Wallet Saved Successfully'.tr,
|
|
AppColor.greenColor);
|
|
},
|
|
),
|
|
],
|
|
),
|
|
barrierDismissible: false,
|
|
);
|
|
}
|
|
}
|
|
|
|
// الكلاس القديم CardIntaleqWallet لم نعد بحاجة إليه لأنه تم دمجه وتطويره
|