نسخة كاملة من مستودع سيرو عند ecfe7568 لتكون أساس تطبيق «انطلق». نُسخ المتعقَّب في git فقط (12,509 ملفاً / 302 م.ب) بـ git archive، لا `cp -r` — فاستُثنيت تلقائياً مخلفات البناء (build · node_modules · .dart_tool · .gradle · Pods ≈ 10.7 غ.ب) وكل ما يستثنيه .gitignore. هذا الكوميت **بلا أي تعديل عمداً** حتى يكون كل ما يليه فرقاً مقروءاً مقابل سيرو الأصلي. سيرو نفسه لم يُمسّ. ⚠️ لا يبني بعد: `.env` و`lib/env/env.g.dart` غير متعقَّبين في سيرو (وهذا صحيح — أسرار لكل مستأجر). كل تطبيق فلاتر هنا يحتاج .env خاصاً بانطلق ثم توليد env.g.dart عبر build_runner. لا تُنسخ أسرار سيرو. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
100 lines
3.3 KiB
Dart
100 lines
3.3 KiB
Dart
import 'package:siro_rider/print.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:webview_flutter/webview_flutter.dart';
|
|
|
|
// ✅ شاشة جديدة ومبسطة خاصة بـ ecash
|
|
class EcashPaymentScreen extends StatefulWidget {
|
|
final String paymentUrl;
|
|
|
|
const EcashPaymentScreen({required this.paymentUrl, Key? key})
|
|
: super(key: key);
|
|
|
|
@override
|
|
State<EcashPaymentScreen> createState() => _EcashPaymentScreenState();
|
|
}
|
|
|
|
class _EcashPaymentScreenState extends State<EcashPaymentScreen> {
|
|
late final WebViewController _controller;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_controller = WebViewController()
|
|
..setJavaScriptMode(JavaScriptMode.unrestricted)
|
|
..setNavigationDelegate(NavigationDelegate(
|
|
onPageFinished: (url) {
|
|
Log.print('Ecash WebView URL Finished: $url');
|
|
|
|
// ✅ هنا نتحقق فقط من أن المستخدم عاد إلى صفحة النجاح
|
|
// هذه الصفحة هي التي حددناها في `APP_REDIRECT_URL_SUCCESS` في ملف PHP
|
|
if (url.contains("success.php")) {
|
|
// لا نستدعي أي API هنا. الـ Webhook على السيرفر يقوم بكل العمل.
|
|
// فقط نعرض للمستخدم رسالة بأن العملية قيد المراجعة ونغلق الشاشة.
|
|
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),
|
|
);
|
|
}
|
|
} |