import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:local_auth/local_auth.dart'; import 'package:webview_flutter/webview_flutter.dart'; import '../../../constant/box_name.dart'; import '../../../constant/links.dart'; import '../../../constant/style.dart'; import '../../../controller/functions/crud.dart'; import '../../../main.dart'; // --- ملاحظات هامة --- // 1. تأكد من إضافة الرابط الجديد إلى ملف AppLink الخاص بك: // static const String payWithEcashDriver = "$server/payment/payWithEcashDriver.php"; // // 2. تأكد من أنك تخزن 'driverId' في الـ box الخاص بك، مثلاً: // box.read(BoxName.driverID) /// دالة جديدة لبدء عملية الدفع للسائق عبر ecash Future payWithEcashDriver(BuildContext context, String amount) async { try { // يمكنك استخدام نفس طريقة التحقق بالبصمة إذا أردت bool isAvailable = await LocalAuthentication().isDeviceSupported(); if (isAvailable) { bool didAuthenticate = await LocalAuthentication().authenticate( localizedReason: 'Use Touch ID or Face ID to confirm payment'.tr, ); if (didAuthenticate) { // استدعاء الـ Endpoint الجديد على السيرفر الخاص بك var res = await CRUD().postWallet( link: AppLink.payWithEcashDriver, payload: { // أرسل البيانات التي يحتاجها السيرفر "amount": amount, // "driverId": box.read(BoxName.driverID), // تأكد من وجود هذا المتغير "driverId": box.read(BoxName.driverID), // تأكد من وجود هذا المتغير }, ); // التأكد من أن السيرفر أعاد رابط الدفع بنجاح if (res != null && res['status'] == 'success' && res['message'] != null) { final String paymentUrl = res['message']; // الانتقال إلى شاشة الدفع الجديدة الخاصة بـ ecash للسائق Navigator.push( context, MaterialPageRoute( builder: (context) => EcashDriverPaymentScreen(paymentUrl: paymentUrl), ), ); } else { // عرض رسالة خطأ في حال فشل السيرفر في إنشاء الرابط Get.defaultDialog( title: 'Error'.tr, content: Text( 'Failed to initiate payment. Please try again.'.tr, style: AppStyle.title, ), ); } } } } catch (e) { Get.defaultDialog( title: 'Error'.tr, content: Text( 'An error occurred during the payment process.'.tr, style: AppStyle.title, ), ); } } /// شاشة جديدة ومبسطة خاصة بدفع السائقين عبر ecash class EcashDriverPaymentScreen extends StatefulWidget { final String paymentUrl; const EcashDriverPaymentScreen({required this.paymentUrl, Key? key}) : super(key: key); @override State createState() => _EcashDriverPaymentScreenState(); } class _EcashDriverPaymentScreenState extends State { late final WebViewController _controller; @override void initState() { super.initState(); _controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate(NavigationDelegate( onPageFinished: (url) { print('Ecash Driver WebView URL Finished: $url'); // هنا نتحقق فقط من أن المستخدم عاد إلى صفحة النجاح // لا حاجة لاستدعاء أي API هنا، فالـ Webhook يقوم بكل العمل if (url.contains("success.php")) { showProcessingDialog(); } }, )) ..loadRequest(Uri.parse(widget.paymentUrl)); } // دالة لعرض رسالة "العملية قيد المعالجة" void showProcessingDialog() { showDialog( barrierDismissible: false, context: Get.context!, builder: (BuildContext context) { return AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12.0), ), title: Row( children: [ Icon(Icons.check_circle, color: Colors.green), const SizedBox(width: 8), Text( "Payment Successful".tr, style: TextStyle( color: Colors.green, fontWeight: FontWeight.bold, ), ), ], ), content: Text( "Your payment is being processed and your wallet will be updated shortly." .tr, style: const TextStyle(fontSize: 16), ), actions: [ TextButton( onPressed: () { // أغلق مربع الحوار، ثم أغلق شاشة الدفع Navigator.pop(context); // Close the dialog Navigator.pop(context); // Close the payment screen }, style: TextButton.styleFrom( backgroundColor: Colors.green, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), ), ), child: Text( "OK".tr, style: const TextStyle(color: Colors.white), ), ), ], ); }, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Complete Payment'.tr)), body: WebViewWidget(controller: _controller), ); } }