From 0407d37e9dea87081a880f387f04059b1b7a62cd Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Tue, 25 Jun 2024 15:08:56 +0300 Subject: [PATCH] 6/25/1 --- lib/constant/box_name.dart | 2 + lib/constant/colors.dart | 4 + .../auth/captin/login_captin_controller.dart | 4 + .../home/captin/map_driver_controller.dart | 9 +- .../payment/captain_wallet_controller.dart | 8 +- lib/controller/local/translations.dart | 85 +-- .../passenger_wallet_history_controller.dart | 45 -- lib/splash_screen_page.dart | 2 +- .../Captin/home_captain/drawer_captain.dart | 2 +- .../home/my_wallet/bank_account_egypt.dart | 51 ++ .../home/my_wallet/card_wallet_widget.dart | 13 +- .../payment_history_passenger_page.dart | 61 --- lib/views/home/my_wallet/points_captain.dart | 59 +- lib/views/home/my_wallet/walet_captain.dart | 143 +++-- lib/views/home/profile/profile_captain.dart | 511 +++++++++--------- lib/views/widgets/my_textField.dart | 7 +- 16 files changed, 513 insertions(+), 493 deletions(-) delete mode 100644 lib/controller/payment/passenger_wallet_history_controller.dart create mode 100644 lib/views/home/my_wallet/bank_account_egypt.dart delete mode 100644 lib/views/home/my_wallet/payment_history_passenger_page.dart diff --git a/lib/constant/box_name.dart b/lib/constant/box_name.dart index 53fd963..f8c9b44 100644 --- a/lib/constant/box_name.dart +++ b/lib/constant/box_name.dart @@ -30,6 +30,8 @@ class BoxName { static const String passengerID = "pasengerID"; static const String phone = "phone"; static const String phoneDriver = "phoneDriver"; + static const String bankCodeDriver = "bankCodeDriver"; + static const String accountBankNumberDriver = "accountBankNumberDriver"; static const String dobDriver = "dobDriver"; static const String sexDriver = "sexDriver"; static const String lastNameDriver = "lastNameDriver"; diff --git a/lib/constant/colors.dart b/lib/constant/colors.dart index 0c99e3a..5abe23d 100644 --- a/lib/constant/colors.dart +++ b/lib/constant/colors.dart @@ -3,6 +3,10 @@ import 'package:flutter/material.dart'; class AppColor { static const Color primaryColor = Color(0xFF1DA1F2); static const Color writeColor = Color(0xff222359); + + static const Color bronze = Color(0xFFCD7F32); + static const Color goldenBronze = Color(0xFFB87333); // Golden bronze color + static const Color gold = Color(0xFFD4AF37); static const Color secondaryColor = Colors.white; static const Color accentColor = Colors.grey; static const Color greyColor = Colors.grey; diff --git a/lib/controller/auth/captin/login_captin_controller.dart b/lib/controller/auth/captin/login_captin_controller.dart index 7a754d3..bc36c5c 100644 --- a/lib/controller/auth/captin/login_captin_controller.dart +++ b/lib/controller/auth/captin/login_captin_controller.dart @@ -132,6 +132,10 @@ class LoginCaptinController extends GetxController { box.write(BoxName.phoneVerified, jsonDecoeded['data'][0]['is_verified'].toString()); box.write(BoxName.phoneDriver, jsonDecoeded['data'][0]['phone']); + box.write( + BoxName.bankCodeDriver, jsonDecoeded['data'][0]['bankCode']); + box.write(BoxName.accountBankNumberDriver, + jsonDecoeded['data'][0]['accountBank']); box.write( BoxName.nameDriver, '${jsonDecoeded['data'][0]['first_name']}' diff --git a/lib/controller/home/captin/map_driver_controller.dart b/lib/controller/home/captin/map_driver_controller.dart index b5b4be7..151906c 100644 --- a/lib/controller/home/captin/map_driver_controller.dart +++ b/lib/controller/home/captin/map_driver_controller.dart @@ -1,8 +1,5 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:math' as math; -import 'dart:math' show cos; -import 'package:SEFER/constant/table_names.dart'; import 'package:SEFER/controller/home/captin/home_captain_controller.dart'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; @@ -523,10 +520,8 @@ class MapDriverController extends GetxController { } double pointsSubtraction = 0; - pointsSubtraction = double.parse(paymentAmount) * - (-1) * - double.parse(kazan) / - 100; // for Egypt /100 + pointsSubtraction = + double.parse(paymentAmount) * (-1) * double.parse(kazan); var paymentToken2 = await generateTokenDriver((pointsSubtraction).toStringAsFixed(0)); var res = await CRUD().post(link: AppLink.addDriversWalletPoints, payload: { diff --git a/lib/controller/home/payment/captain_wallet_controller.dart b/lib/controller/home/payment/captain_wallet_controller.dart index faba908..d7e0616 100644 --- a/lib/controller/home/payment/captain_wallet_controller.dart +++ b/lib/controller/home/payment/captain_wallet_controller.dart @@ -14,6 +14,7 @@ import 'package:SEFER/main.dart'; class CaptainWalletController extends GetxController { bool isLoading = false; final formKeyTransfer = GlobalKey(); + final formKeyAccount = GlobalKey(); Map walletDate = {}; Map walletDateVisa = {}; Map walletDriverPointsDate = {}; @@ -24,6 +25,8 @@ class CaptainWalletController extends GetxController { final amountFromBudgetController = TextEditingController(); final newDriverPhoneController = TextEditingController(); final phoneWallet = TextEditingController(); + final cardBank = TextEditingController(); + final bankCode = TextEditingController(); payFromBudget() async { if (formKey.currentState!.validate()) { @@ -198,7 +201,10 @@ class CaptainWalletController extends GetxController { await CRUD().post(link: AppLink.addDriversWalletPoints, payload: { 'driverID': amountToNewDriverMap[0]['id'].toString(), 'paymentID': paymentID.toString(), - 'amount': (int.parse(amountFromBudgetController.text) - 5).toString(), + 'amount': ((int.parse(amountFromBudgetController.text) - 5) / .08) + .toStringAsFixed( + 0), // this will convert buddget to poitns by kazan .08 + 'token': paymentToken, 'paymentMethod': paymentMethod2.toString(), }); diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart index 704c238..2763387 100644 --- a/lib/controller/local/translations.dart +++ b/lib/controller/local/translations.dart @@ -4,7 +4,18 @@ class MyTranslation extends Translations { @override Map> get keys => { "ar": { - "You don't have enough money in your SEFER wallet": + "Please enter a valid card 16-digit number.": + "الرجاء إدخال رقم بطاقة صحيح مكون من 16 رقمًا.", + "Insert card number": "أدخل رقم البطاقة", + "Bank account added successfully": "تمت إضافة الحساب البنكي بنجاح", + "Updated successfully": "تم التحديث بنجاح", + "Create Wallet to receive your money": "أنشئ محفظة لاستقبال أموالك", + "Insert Account Bank": "أدخل رقم حسابك البنكي", + "Insert Card Bank Details to Receive Your Visa Money Weekly": + "أدخل تفاصيل بطاقتك البنكية لاستقبال راتبك عبر فيزا كل أسبوع", + "Select Name of Your Bank": "اختر اسم بنكك", + "Create Wallet to receive your money" + "You don't have enough money in your SEFER wallet": "لا يوجد رصيد كافٍ في محفظة SEFER الخاصة بك ", "You have transferred to your wallet from": "لقد حولت إلى محفظتك من", 'Transfer': "تحويل", @@ -87,8 +98,8 @@ class MyTranslation extends Translations { 'This amount for all trip I get from Passengers and Collected For me in': 'هذا المبلغ لجميع الرحلات التي أحصل عليها من الركاب والمجموعة لي في', 'Total Budget from trips is ': 'إجمالي الميزانية من الرحلات هو ', - 'You can buy Points to let you online\nby this list below': - 'يمكنك سداد المديونية من هذه القائمة', + "You can purchase a budget to enable online access through the options listed below.": + 'يمكنك ‏إضافة رصيد من هذه القائمة', 'You can buy points from your budget': 'يمكنك سداد المديونية من حسابك', "expiration_date": "تاريخ الانتهاء", @@ -648,11 +659,12 @@ class MyTranslation extends Translations { "Please help! Contact me as soon as possible.": "من فضلك ساعدني! تواصل معي في أقرب وقت ممكن.", "Share Trip Details": "شارك تفاصيل الرحلة", - "Car Plate is": "لوحة السيارة", - "the 300 points equal 300 L.E for you": - "الـ 300 نقطة تعادل 300 جنيه مصري بالنسبة لك", + "Car Plate is": "لوحة السيارة", 'L.E': 'جنيه', + "the 3000 points equal 3000 L.E for you": + "الـ 3000 نقطة تعادل 3000 جنيه مصري بالنسبة لك", "So go and gain your money": "انطلق واكسب مالك", - "the 300 points equal 300 L.E": "الـ 300 نقطة تساوي 300 جنيه مصري", + "the 3000 points equal 3000 L.E": + "الـ 3000 نقطة تساوي 3000 جنيه مصري", "The payment was not approved. Please try again.": "لم يتم الموافقة على الدفع. يرجى المحاولة مرة أخرى.", "Payment Failed": "تعذرت عملية الدفع", @@ -676,8 +688,8 @@ class MyTranslation extends Translations { ' is ON for this month': ' لهذا الشهر ', "Origin": "الأصل", "Destination": "مكان الوصول", - 'the 300 points equal 300 L.E for you \nSo go and gain your money': - "ال300 نقطة تعادل 300 ج.م لك، فاذهب واكسب مالك.", + 'the 3000 points equal 3000 L.E for you \nSo go and gain your money': + "ال3000 نقطة تعادل 3000 ج.م لك، فاذهب واكسب مالك.", "Driver Name": "اسم السائق", "Driver Car Plate": "لوحة سيارة السائق", "Available for rides": "‏الرحلات المتوفرة", @@ -1423,18 +1435,18 @@ class MyTranslation extends Translations { "Konumum doğru. Navigasyon uygulamasını kullanarak beni arayabilirsiniz", "Share Trip Details": "Seni bekliyorum", "Car Plate is": "Merhaba, kararlaştırılan yerdeyim", - "the 300 points equal 300 L.E for you": + "the 3000 points equal 3000 L.E for you": "Hızın 100 km/s'yi aştığını fark ettik. Lütfen güvenliğiniz için yavaşlayın. Kendinizi güvende hissetmiyorsanız yolculuk bilgilerinizi bir kişiyle paylaşabilir veya kırmızı sos düğmesini kullanarak polisi arayabilirsiniz.", "So go and gain your money": "Uyarı: Hız algılandı!", - "the 300 points equal 300 L.E": + "the 3000 points equal 3000 L.E": "Lütfen yardım edin! En kısa sürede benimle iletişime geçin.", "The payment was not approved. Please try again.": "Yolculuk bilgilerini paylaşın", "Payment Failed": "Araç Plakası:", - "Error": "300 puan sizin için 300 L.E.' ye eşittir", + "Error": "3000 puan sizin için 3000 L.E.' ye eşittir", "An error occurred during the payment process.": "Öyleyse git ve paranı kazan", - "The payment was approved.": "300 puan 300 L.E.' ye eşittir.", + "The payment was approved.": "3000 puan 3000 L.E.' ye eşittir.", "Payment Successful": "Ödeme onaylanmadı. Please try again later.", "No ride found yet": "Ödeme Başarısız", "Accept Order": "Error", @@ -2220,10 +2232,10 @@ class MyTranslation extends Translations { "Aide-moi s'il te plaît. Contactez-moi dès que possible.", "Share Trip Details": "Partagez les détails de la", "Car Plate is": "Le numéro d'immatriculation ?", - "the 300 points equal 300 L.E for you": - "300 points équivaut à 300 EGP pour vous", + "the 3000 points equal 3000 L.E for you": + "3000 points équivaut à 3000 EGP pour vous", "So go and gain your money": "Gagnez de l'argent", - "the 300 points equal 300 L.E": "300 points équivaut à 300 EGP", + "the 3000 points equal 3000 L.E": "3000 points équivaut à 3000 EGP", "The payment was not approved. Please try again.": "Paiement non approuvé. Réessayer", "Payment Failed": "Échec du paiement", @@ -3020,10 +3032,10 @@ class MyTranslation extends Translations { "Aide-moi s'il te plaît. Contactez-moi dès que possible.", "Share Trip Details": "Partagez les détails de la", "Car Plate is": "Le numéro d'immatriculation ?", - "the 300 points equal 300 L.E for you": - "300 points équivaut à 300 EGP pour vous", + "the 3000 points equal 3000 L.E for you": + "3000 points équivaut à 3000 EGP pour vous", "So go and gain your money": "Gagnez de l'argent", - "the 300 points equal 300 L.E": "300 points équivaut à 300 EGP", + "the 3000 points equal 3000 L.E": "3000 points équivaut à 3000 EGP", "The payment was not approved. Please try again.": "Paiement non approuvé. Réessayer", "Payment Failed": "Échec du paiement", @@ -3817,10 +3829,10 @@ class MyTranslation extends Translations { "Aide-moi s'il te plaît. Contactez-moi dès que possible.", "Share Trip Details": "Partagez les détails de la", "Car Plate is": "Le numéro d'immatriculation ?", - "the 300 points equal 300 L.E for you": - "300 points équivaut à 300 EGP pour vous", + "the 3000 points equal 3000 L.E for you": + "3000 points équivaut à 3000 EGP pour vous", "So go and gain your money": "Gagnez de l'argent", - "the 300 points equal 300 L.E": "300 points équivaut à 300 EGP", + "the 3000 points equal 3000 L.E": "3000 points équivaut à 3000 EGP", "The payment was not approved. Please try again.": "Paiement non approuvé. Réessayer", "Payment Failed": "Échec du paiement", @@ -4615,10 +4627,10 @@ class MyTranslation extends Translations { "Aide-moi s'il te plaît. Contactez-moi dès que possible.", "Share Trip Details": "Partagez les détails de la", "Car Plate is": "Le numéro d'immatriculation ?", - "the 300 points equal 300 L.E for you": - "300 points équivaut à 300 EGP pour vous", + "the 3000 points equal 3000 L.E for you": + "3000 points équivaut à 3000 EGP pour vous", "So go and gain your money": "Gagnez de l'argent", - "the 300 points equal 300 L.E": "300 points équivaut à 300 EGP", + "the 3000 points equal 3000 L.E": "3000 points équivaut à 3000 EGP", "The payment was not approved. Please try again.": "Paiement non approuvé. Réessayer", "Payment Failed": "Échec du paiement", @@ -5418,10 +5430,10 @@ class MyTranslation extends Translations { "Aide-moi s'il te plaît. Contactez-moi dès que possible.", "Share Trip Details": "Partagez les détails de la", "Car Plate is": "Le numéro d'immatriculation ?", - "the 300 points equal 300 L.E for you": - "300 points équivaut à 300 EGP pour vous", + "the 3000 points equal 3000 L.E for you": + "3000 points équivaut à 3000 EGP pour vous", "So go and gain your money": "Gagnez de l'argent", - "the 300 points equal 300 L.E": "300 points équivaut à 300 EGP", + "the 3000 points equal 3000 L.E": "3000 points équivaut à 3000 EGP", "The payment was not approved. Please try again.": "Paiement non approuvé. Réessayer", "Payment Failed": "Échec du paiement", @@ -6204,10 +6216,10 @@ class MyTranslation extends Translations { "कृपया मेरी मदद करें! जितनी जल्दी हो सके मुझसे संपर्क करें।", "Share Trip Details": "ट्रिप का ब्यौरा दें", "Car Plate is": "कार के चारों ओर ले आओ।", - "the 300 points equal 300 L.E for you": - "300 अंक आपके लिए 300 EGP के बराबर है", + "the 3000 points equal 3000 L.E for you": + "3000 अंक आपके लिए 3000 EGP के बराबर है", "So go and gain your money": "अपने पैसे कमाने के लिए आगे बढ़ें", - "the 300 points equal 300 L.E": "300 points बराबर है: 300 EGP", + "the 3000 points equal 3000 L.E": "3000 points बराबर है: 3000 EGP", "The payment was not approved. Please try again.": "भुगतान मंज़ूर नहीं किया गया। फिर से कोशिश करें", "Payment Failed": "भुगतान नहीं हो सका", @@ -6983,10 +6995,11 @@ class MyTranslation extends Translations { "لطفأ ، کمکم کن. در اسرع وقت با من تماس بگیرید.", "Share Trip Details": "جزئیات سفر را به اشتراک بگذارید", "Car Plate is": "پلاک اتومبیل", - "the 300 points equal 300 L.E for you": - "300 امتیاز برای شما معادل 300 پوند مصر است", + "the 3000 points equal 3000 L.E for you": + "3000 امتیاز برای شما معادل 3000 پوند مصر است", "So go and gain your money": "برو جلو و پولت را در بیاور", - "the 300 points equal 300 L.E": "300 امتیاز معادل 300 پوند مصر است", + "the 3000 points equal 3000 L.E": + "3000 امتیاز معادل 3000 پوند مصر است", "The payment was not approved. Please try again.": "پرداخت تایید نشد سعی مجدد", "Payment Failed": "پرداخت ناموفق", @@ -7706,9 +7719,9 @@ class MyTranslation extends Translations { "Please help! Contact me as soon as possible.": "請幫幫我!請盡快與我聯絡。", "Share Trip Details": "提供行程詳細資訊", "Car Plate is": "車牌號碼", - "the 300 points equal 300 L.E for you": "300分等於300 EGP", + "the 3000 points equal 3000 L.E for you": "3000分等於3000 EGP", "So go and gain your money": "開始賺取收入", - "the 300 points equal 300 L.E": "300分等於300 EGP", + "the 3000 points equal 3000 L.E": "3000分等於3000 EGP", "The payment was not approved. Please try again.": "付款未批準。請再試一次。", "Payment Failed": "付款失敗", "Error": "錯誤", diff --git a/lib/controller/payment/passenger_wallet_history_controller.dart b/lib/controller/payment/passenger_wallet_history_controller.dart deleted file mode 100644 index 3ca4db3..0000000 --- a/lib/controller/payment/passenger_wallet_history_controller.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'dart:convert'; - -import 'package:SEFER/constant/style.dart'; -import 'package:SEFER/views/widgets/elevated_btn.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/constant/box_name.dart'; -import 'package:SEFER/constant/links.dart'; -import 'package:SEFER/controller/functions/crud.dart'; -import 'package:SEFER/main.dart'; - -class PassengerWalletHistoryController extends GetxController { - bool isLoading = false; - List archive = []; - - getArchivePayment() async { - isLoading = true; - update(); - var res = await CRUD().get( - link: AppLink.getPassengerWalletArchive, - payload: {'passenger_id': box.read(BoxName.passengerID)}); - if (res != 'failure') { - archive = jsonDecode(res)['message']; - isLoading = false; - update(); - } else { - Get.defaultDialog( - barrierDismissible: false, - title: 'No wallet record found'.tr, - titleStyle: AppStyle.title, - middleText: '', - confirm: MyElevatedButton( - title: 'OK'.tr, - onPressed: () { - Get.back(); - Get.back(); - })); - } - } - - @override - void onInit() { - getArchivePayment(); - super.onInit(); - } -} diff --git a/lib/splash_screen_page.dart b/lib/splash_screen_page.dart index a222d6b..b0ae419 100644 --- a/lib/splash_screen_page.dart +++ b/lib/splash_screen_page.dart @@ -50,7 +50,7 @@ class SplashScreen extends StatelessWidget { TypewriterAnimatedText( 'Welcome to ${AppInformation.appName}', textStyle: - AppStyle.headTitle2.copyWith(color: AppColor.greenColor), + AppStyle.headTitle2.copyWith(color: AppColor.writeColor), speed: const Duration(milliseconds: 200), ), ], isRepeatingAnimation: true), diff --git a/lib/views/home/Captin/home_captain/drawer_captain.dart b/lib/views/home/Captin/home_captain/drawer_captain.dart index d3d0b5a..54aa73d 100644 --- a/lib/views/home/Captin/home_captain/drawer_captain.dart +++ b/lib/views/home/Captin/home_captain/drawer_captain.dart @@ -40,7 +40,7 @@ class DrawerCaptain extends StatelessWidget { _buildDrawerItem( icon: Icons.person, text: 'Profile'.tr, - onTap: () => Get.to(() => const ProfileCaptain(), + onTap: () => Get.to(() => ProfileCaptain(), transition: Transition.rightToLeftWithFade), ), _buildDivider(), diff --git a/lib/views/home/my_wallet/bank_account_egypt.dart b/lib/views/home/my_wallet/bank_account_egypt.dart new file mode 100644 index 0000000..72c438c --- /dev/null +++ b/lib/views/home/my_wallet/bank_account_egypt.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class BankController extends GetxController { + String selectedBank = ''; + Map bankNames = { + 'CIB Bank'.tr: 'CIB', + 'National Bank of Egypt'.tr: 'NBE', + 'QNB Al Ahli'.tr: 'QNB', + 'Bank Misr'.tr: 'BM', + // Add other bank full names and short names here + }; + + @override + void onInit() { + super.onInit(); + selectedBank = bankNames.values.first; + } + + void updateSelectedBank(String? bankShortName) { + selectedBank = bankShortName ?? ''; + update(); + } + + List> getDropdownItems() { + return bankNames.keys.map>((bankFullName) { + return DropdownMenuItem( + value: bankNames[bankFullName], + child: Text(bankFullName), + ); + }).toList(); + } +} + +class BankDropdown extends StatelessWidget { + final BankController bankController = Get.put(BankController()); + + @override + Widget build(BuildContext context) { + return GetBuilder( + init: bankController, + builder: (controller) { + return DropdownButton( + value: controller.selectedBank, + onChanged: controller.updateSelectedBank, + items: controller.getDropdownItems(), + ); + }, + ); + } +} diff --git a/lib/views/home/my_wallet/card_wallet_widget.dart b/lib/views/home/my_wallet/card_wallet_widget.dart index 0a481d8..1ca5458 100644 --- a/lib/views/home/my_wallet/card_wallet_widget.dart +++ b/lib/views/home/my_wallet/card_wallet_widget.dart @@ -152,17 +152,20 @@ class CardSeferWalletDriver extends StatelessWidget { color: AppColor.deepPurpleAccent, borderRadius: const BorderRadius.all(Radius.circular(12)), gradient: const LinearGradient( - colors: [AppColor.blueColor, AppColor.primaryColor]), + colors: [AppColor.greyColor, AppColor.writeColor]), ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Row( children: [ - Text( - '${AppInformation.appName} Wallet', - style: AppStyle.headTitle - .copyWith(color: AppColor.primaryColor), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Text( + '${AppInformation.appName} Wallet', + style: AppStyle.headTitle + .copyWith(color: AppColor.writeColor), + ), ) ], ), diff --git a/lib/views/home/my_wallet/payment_history_passenger_page.dart b/lib/views/home/my_wallet/payment_history_passenger_page.dart deleted file mode 100644 index 2ecc4a0..0000000 --- a/lib/views/home/my_wallet/payment_history_passenger_page.dart +++ /dev/null @@ -1,61 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/constant/colors.dart'; -import 'package:SEFER/constant/style.dart'; -import 'package:SEFER/controller/payment/passenger_wallet_history_controller.dart'; -import 'package:SEFER/views/widgets/my_scafold.dart'; -import 'package:SEFER/views/widgets/mycircular.dart'; - -class PaymentHistoryPassengerPage extends StatelessWidget { - const PaymentHistoryPassengerPage({super.key}); - - @override - Widget build(BuildContext context) { - Get.put(PassengerWalletHistoryController()); - return MyScafolld( - title: 'Payment History'.tr, - body: [ - GetBuilder( - builder: (controller) => controller.isLoading - ? const MyCircularProgressIndicator() - : controller.archive.isEmpty - ? Center( - child: Text( - 'No wallet record found'.tr, - style: AppStyle.title, - ), - ) - : ListView.builder( - itemCount: controller.archive.length, - itemBuilder: (BuildContext context, int index) { - var list = controller.archive[index]; - return Padding( - padding: const EdgeInsets.all(4), - child: Container( - decoration: BoxDecoration( - color: double.parse(list['balance']) < 0 - ? AppColor.redColor.withOpacity(.4) - : AppColor.greenColor.withOpacity(.4)), - child: Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - list['balance'], - style: AppStyle.title, - ), - Text( - list['created_at'], - style: AppStyle.title, - ), - ], - ), - ), - ); - }, - ), - ) - ], - isleading: true); - } -} diff --git a/lib/views/home/my_wallet/points_captain.dart b/lib/views/home/my_wallet/points_captain.dart index 0fa019e..5ed8b70 100644 --- a/lib/views/home/my_wallet/points_captain.dart +++ b/lib/views/home/my_wallet/points_captain.dart @@ -97,30 +97,43 @@ class PointsCaptain extends StatelessWidget { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 3, vertical: 8), child: Container( - width: Get.width * .22, - height: Get.width * .22, - margin: const EdgeInsets.all(4), - decoration: BoxDecoration( - color: kolor, - border: Border.all(color: AppColor.accentColor), - borderRadius: BorderRadius.circular(12), - shape: BoxShape.rectangle, + width: Get.width * .22, + height: Get.width * .22, + margin: const EdgeInsets.all(4), + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [ + kolor.withOpacity(0.3), + kolor, + kolor.withOpacity(0.7), + kolor, + ], + begin: Alignment.topLeft, + end: Alignment.bottomRight, ), - child: Center( - child: Column( - children: [ - Text( - '$countPoint ${'Point'.tr}', - style: AppStyle.subtitle, - ), - Text( - '$pricePoint ${box.read(BoxName.countryCode) == 'Jordan' ? 'JOD'.tr : 'LE'.tr}', - style: AppStyle.title, - textAlign: TextAlign.center, - ), - ], - ), - )), + border: Border.all(color: AppColor.accentColor), + borderRadius: BorderRadius.circular(12), + shape: BoxShape.rectangle, + ), + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text( + '$countPoint ${box.read(BoxName.countryCode) == 'Jordan' ? 'JOD'.tr : 'L.E'.tr}', + style: AppStyle.subtitle + .copyWith(color: AppColor.secondaryColor), + ), + Text( + '$pricePoint ${box.read(BoxName.countryCode) == 'Jordan' ? 'JOD'.tr : 'L.E'.tr}', + style: + AppStyle.title.copyWith(color: AppColor.secondaryColor), + textAlign: TextAlign.center, + ), + ], + ), + ), + ), ), ); } diff --git a/lib/views/home/my_wallet/walet_captain.dart b/lib/views/home/my_wallet/walet_captain.dart index 50d0a96..f033ac4 100644 --- a/lib/views/home/my_wallet/walet_captain.dart +++ b/lib/views/home/my_wallet/walet_captain.dart @@ -1,5 +1,8 @@ +import 'package:SEFER/constant/links.dart'; +import 'package:SEFER/controller/functions/crud.dart'; import 'package:SEFER/controller/functions/tts.dart'; import 'package:SEFER/controller/home/payment/paymob_payout.dart'; +import 'package:SEFER/views/home/my_wallet/bank_account_egypt.dart'; import 'package:SEFER/views/home/my_wallet/payment_history_driver_page.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -48,19 +51,19 @@ class WalletCaptain extends StatelessWidget { 0 && double.parse( captainWalletController.totalPoints) > - -300 + -3000 ? AppColor.yellowColor : double.parse( captainWalletController.totalPoints) < - -300 + -3000 ? AppColor.redColor : AppColor.greenColor, // ), child: InkWell( onTap: () { Get.snackbar( - 'the 300 points equal 300 L.E'.tr, - 'the 300 points equal 300 L.E for you \nSo go and gain your money' + 'the 3000 points equal 3000 L.E'.tr, + 'the 3000 points equal 3000 L.E for you \nSo go and gain your money' .tr, backgroundColor: AppColor.greenColor, snackPosition: SnackPosition.BOTTOM, @@ -83,7 +86,7 @@ class WalletCaptain extends StatelessWidget { ), double.parse(captainWalletController.totalPoints .toString()) < - -300 + -3000 ? MyElevatedButton( title: 'Charge your Account'.tr, onPressed: () {}) @@ -110,7 +113,7 @@ class WalletCaptain extends StatelessWidget { decoration: BoxDecoration( border: Border.all( width: 2, - color: AppColor.redColor)), + color: AppColor.writeColor)), child: GestureDetector( onTap: () { Get.snackbar( @@ -159,7 +162,7 @@ class WalletCaptain extends StatelessWidget { decoration: BoxDecoration( border: Border.all( width: 2, - color: AppColor.greenColor)), + color: AppColor.writeColor)), child: Padding( padding: const EdgeInsets.all(2), child: InkWell( @@ -276,47 +279,47 @@ class WalletCaptain extends StatelessWidget { height: 10, ), Padding( - padding: const EdgeInsets.all(8.0), - child: Container( - decoration: AppStyle.boxDecoration, - child: Column( - children: [ - Text( - 'You can buy Points to let you online\nby this list below' - .tr, - textAlign: TextAlign.center, - style: AppStyle.title, - ), - const Divider( - indent: 30, - endIndent: 30, - color: AppColor.accentColor, - thickness: 3, - ), - const SizedBox( - height: 10, - ), - Container( + padding: const EdgeInsets.all(8.0), + child: Container( + decoration: AppStyle.boxDecoration, + child: Column(children: [ + Text( + "You can purchase a budget to enable online access through the options listed below." + .tr, + textAlign: TextAlign.center, + style: AppStyle.title, + ), + const Divider( + indent: 30, + endIndent: 30, + color: AppColor.accentColor, + thickness: 3, + ), + const SizedBox( + height: 10, + ), + Container( decoration: AppStyle.boxDecoration, height: Get.height * .19, child: ListView( scrollDirection: Axis.horizontal, children: [ PointsCaptain( - kolor: AppColor.blueColor, + kolor: AppColor.greyColor, pricePoint: box.read(BoxName.countryCode) == 'Jordan' ? 5 - : 100, + : 80, countPoint: box.read(BoxName.countryCode) == 'Jordan' - ? '300' - : '100', + ? '3000' + : '1000', ), PointsCaptain( - kolor: Colors.green, + kolor: AppColor + .bronze, // Bronze color for medium value pricePoint: box.read(BoxName.countryCode) == 'Jordan' @@ -326,10 +329,11 @@ class WalletCaptain extends StatelessWidget { box.read(BoxName.countryCode) == 'Jordan' ? '1040' - : '210', + : '2500', ), PointsCaptain( - kolor: Colors.amberAccent, + kolor: AppColor + .goldenBronze, // Golden bronze color for higher value pricePoint: box.read(BoxName.countryCode) == 'Jordan' @@ -338,11 +342,12 @@ class WalletCaptain extends StatelessWidget { countPoint: box.read(BoxName.countryCode) == 'Jordan' - ? '2300' - : '450', + ? '23000' + : '5100', ), PointsCaptain( - kolor: AppColor.yellowColor, + kolor: AppColor + .gold, // Gold color for highest value pricePoint: box.read(BoxName.countryCode) == 'Jordan' @@ -352,14 +357,12 @@ class WalletCaptain extends StatelessWidget { box.read(BoxName.countryCode) == 'Jordan' ? '55000' - : '1200', + : '130000', ), ], - )), - ], - ), - ), - ), + ), + ), + ]))), const SizedBox( height: 30, ), @@ -374,10 +377,11 @@ class WalletCaptain extends StatelessWidget { title: 'Create Wallet to receive your money', onPressed: () async { - PaymentController paymentController = - Get.find(); - paymentController - .createConnectAccount(); + box.read(BoxName.countryCode) == 'Egypt' + ? addBankCodeEgypt( + captainWalletController) + : Get.find() + .createConnectAccount(); }), ], ) @@ -440,6 +444,49 @@ class WalletCaptain extends StatelessWidget { } } +Future addBankCodeEgypt( + CaptainWalletController captainWalletController) { + return Get.defaultDialog( + title: "Insert Account Bank".tr, + content: Form( + key: captainWalletController.formKeyAccount, + child: Column( + children: [ + Text("Insert Card Bank Details to Receive Your Visa Money Weekly" + .tr), + MyTextForm( + controller: captainWalletController.cardBank, + label: "Insert card number".tr, + hint: '4123 4567 8910 1235', + type: TextInputType.number), + const SizedBox( + height: 10, + ), + BankDropdown() + ], + )), + confirm: MyElevatedButton( + title: 'Ok'.tr, + onPressed: () async { + if (captainWalletController.formKeyAccount.currentState! + .validate()) { + Get.back(); + var res = + await CRUD().post(link: AppLink.updateAccountBank, payload: { + "bankCode": Get.find().selectedBank.toString(), + "accountBank": captainWalletController.cardBank.text.toString(), + "id": box.read(BoxName.driverID).toString() + }); + print('res: ${res}'); + if (res != 'failure') { + Get.snackbar( + 'updated succses'.tr, 'bank account added succesfly', + backgroundColor: AppColor.greenColor); + } + } + })); +} + class MyDropDown1 extends StatelessWidget { @override Widget build(BuildContext context) { diff --git a/lib/views/home/profile/profile_captain.dart b/lib/views/home/profile/profile_captain.dart index 2f0d8a2..d65eb71 100644 --- a/lib/views/home/profile/profile_captain.dart +++ b/lib/views/home/profile/profile_captain.dart @@ -1,13 +1,16 @@ import 'package:SEFER/constant/style.dart'; +import 'package:SEFER/controller/home/payment/captain_wallet_controller.dart'; import 'package:SEFER/views/widgets/mycircular.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:SEFER/controller/profile/captain_profile_controller.dart'; import 'package:SEFER/views/widgets/my_scafold.dart'; -class ProfileCaptain extends StatelessWidget { - const ProfileCaptain({super.key}); +import '../my_wallet/walet_captain.dart'; +class ProfileCaptain extends StatelessWidget { + ProfileCaptain({super.key}); + CaptainWalletController captainWalletController = CaptainWalletController(); @override Widget build(BuildContext context) { Get.put(CaptainProfileController()); @@ -21,43 +24,77 @@ class ProfileCaptain extends StatelessWidget { child: Center( child: controller.isLoading ? const MyCircularProgressIndicator() - : DriverProfileCard( - driverId: - controller.captainProfileData['driverID'] ?? '', - name: controller.captainProfileData['first_name'] + - ' ' + - (controller.captainProfileData['last_name'] ?? ''), - phoneNumber: - controller.captainProfileData['phone'] ?? '', - email: controller.captainProfileData['email'] ?? '', - birthdate: - controller.captainProfileData['birthdate'] ?? '', - gender: controller.captainProfileData['gender'] ?? '', - education: - controller.captainProfileData['education'] ?? '', - carMake: controller.captainProfileData['make'] ?? '', - carModel: controller.captainProfileData['model'] ?? '', - carPlate: - controller.captainProfileData['car_plate'] ?? '', - carColor: controller.captainProfileData['color'] ?? '', - vin: controller.captainProfileData['vin'] ?? '', - registrationDate: controller - .captainProfileData['registration_date'] ?? - '', - expirationDate: - controller.captainProfileData['expiration_date'] ?? - '', - ratingCount: - controller.captainProfileData['ratingCount'] ?? 0, - ratingDriver: - controller.captainProfileData['ratingDriver'] != - null - ? double.tryParse(controller - .captainProfileData['ratingDriver'] - .toString()) ?? - 0 - : null, - age: controller.captainProfileData['age'] ?? 0, + : Column( + children: [ + Container( + decoration: AppStyle.boxDecoration1, + child: InkWell( + onTap: () async { + addBankCodeEgypt(captainWalletController); + }, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'Add bank Account'.tr, + style: AppStyle.title, + ), + ), + ), + ), + SizedBox( + height: Get.height * .8, + child: DriverProfileCard( + driverId: + controller.captainProfileData['driverID'] ?? + '', + name: controller + .captainProfileData['first_name'] + + ' ' + + (controller.captainProfileData['last_name'] ?? + ''), + phoneNumber: + controller.captainProfileData['phone'] ?? '', + email: + controller.captainProfileData['email'] ?? '', + birthdate: + controller.captainProfileData['birthdate'] ?? + '', + gender: + controller.captainProfileData['gender'] ?? '', + education: + controller.captainProfileData['education'] ?? + '', + carMake: + controller.captainProfileData['make'] ?? '', + carModel: + controller.captainProfileData['model'] ?? '', + carPlate: + controller.captainProfileData['car_plate'] ?? + '', + carColor: + controller.captainProfileData['color'] ?? '', + vin: controller.captainProfileData['vin'] ?? '', + registrationDate: controller.captainProfileData[ + 'registration_date'] ?? + '', + expirationDate: controller + .captainProfileData['expiration_date'] ?? + '', + ratingCount: controller + .captainProfileData['ratingCount'] ?? + 0, + ratingDriver: controller + .captainProfileData['ratingDriver'] != + null + ? double.tryParse(controller + .captainProfileData['ratingDriver'] + .toString()) ?? + 0 + : null, + age: controller.captainProfileData['age'] ?? 0, + ), + ), + ], ), ), ), @@ -65,63 +102,6 @@ class ProfileCaptain extends StatelessWidget { ) ], isleading: true, - // action: GetBuilder( - // builder: (controller) => IconButton( - // onPressed: () { - // Get.defaultDialog( - // title: 'Edit Your data'.tr, - // titleStyle: AppStyle.title, - // content: SizedBox( - // height: Get.height * .4, - // child: SingleChildScrollView( - // child: Column( - // children: [ - // MyTextForm( - // controller: controller.vin, - // hint: 'write vin for your car'.tr, - // label: 'VIN'.tr, - // type: TextInputType.emailAddress, - // ), - // MyTextForm( - // controller: controller.color, - // hint: 'write Color for your car'.tr, - // label: 'Color'.tr, - // type: TextInputType.emailAddress, - // ), - // MyTextForm( - // controller: controller.make, - // hint: 'write Make for your car'.tr, - // label: 'Make'.tr, - // type: TextInputType.emailAddress, - // ), - // MyTextForm( - // controller: controller.model, - // hint: 'write Model for your car'.tr, - // label: 'Model'.tr, - // type: TextInputType.emailAddress, - // ), - // MyTextForm( - // controller: controller.year, - // hint: 'write Year for your car'.tr, - // label: 'Year'.tr, - // type: TextInputType.number, - // ), - // MyTextForm( - // controller: controller.expirationDate, - // hint: 'write Expiration Date for your car'.tr, - // label: 'Expiration Date'.tr, - // type: TextInputType.datetime), - // MyElevatedButton( - // title: 'Update'.tr, - // onPressed: () => controller.updateFields()) - // ], - // ), - // ), - // )); - // }, - // icon: const Icon(Icons.edit), - // ), - // ) ); } } @@ -167,175 +147,178 @@ class DriverProfileCard extends StatelessWidget { @override Widget build(BuildContext context) { - return Card( - elevation: 8, + return Container( + // elevation: 8, + decoration: AppStyle.boxDecoration1, margin: const EdgeInsets.all(16), - child: Padding( - padding: const EdgeInsets.all(16), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - style: AppStyle.title, - name, - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.phone), - const SizedBox(width: 8), - Text(style: AppStyle.title, phoneNumber), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.calendar_today), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'birthdate'.tr} : $birthdate', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.wc), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'gender'.tr} : $gender', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.school), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'education'.tr} : $education', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.car_repair), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'Make'.tr} : $carMake', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.model_training), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'car_model'.tr} : $carModel', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.drive_eta), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'car_plate'.tr} : $carPlate', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.color_lens), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'car_color'.tr} : $carColor', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.confirmation_number), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'vin'.tr} : $vin', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.calendar_today), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'registration_date'.tr} : $registrationDate', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.calendar_today), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'expiration_date'.tr} : $expirationDate', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.star), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'rating_count'.tr} : $ratingCount', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.star_rate), - const SizedBox(width: 8), - ratingDriver != null - ? Text( - style: AppStyle.title, - '${'rating_driver'.tr} : $ratingDriver', - ) - : Text( - style: AppStyle.title, - '${'rating_driver'.tr} : 0', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon(Icons.person), - const SizedBox(width: 8), - Text( - style: AppStyle.title, - '${'age'.tr} : $age', - ), - ], - ), - ], + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + style: AppStyle.title, + name, + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.phone), + const SizedBox(width: 8), + Text(style: AppStyle.title, phoneNumber), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.calendar_today), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'birthdate'.tr} : $birthdate', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.wc), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'gender'.tr} : $gender', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.school), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'education'.tr} : $education', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.car_repair), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'Make'.tr} : $carMake', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.model_training), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'car_model'.tr} : $carModel', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.drive_eta), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'car_plate'.tr} : $carPlate', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.color_lens), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'car_color'.tr} : $carColor', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.confirmation_number), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'vin'.tr} : $vin', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.calendar_today), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'registration_date'.tr} : $registrationDate', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.calendar_today), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'expiration_date'.tr} : $expirationDate', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.star), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'rating_count'.tr} : $ratingCount', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.star_rate), + const SizedBox(width: 8), + ratingDriver != null + ? Text( + style: AppStyle.title, + '${'rating_driver'.tr} : $ratingDriver', + ) + : Text( + style: AppStyle.title, + '${'rating_driver'.tr} : 0', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + const Icon(Icons.person), + const SizedBox(width: 8), + Text( + style: AppStyle.title, + '${'age'.tr} : $age', + ), + ], + ), + ], + ), ), ), ); diff --git a/lib/views/widgets/my_textField.dart b/lib/views/widgets/my_textField.dart index 49e3371..ed4a36e 100644 --- a/lib/views/widgets/my_textField.dart +++ b/lib/views/widgets/my_textField.dart @@ -7,7 +7,7 @@ import 'package:get_storage/get_storage.dart'; import '../../constant/colors.dart'; class MyTextForm extends StatelessWidget { - const MyTextForm({ + MyTextForm({ super.key, required this.controller, required this.label, @@ -47,6 +47,11 @@ class MyTextForm extends StatelessWidget { if (value!.isEmpty) { return '${'Please enter'.tr} $label.'.tr; } + if (label.contains("Insert card number".tr)) { + if (value.length != 16) { + return "Please enter a valid card 16-digit number.".tr; + } + } if (type == TextInputType.emailAddress) { if (!value.contains('@')) {