Files
musadaq-saas/musadaq-app/lib/features/subscription/views/payment_receipt_view.dart
2026-05-07 03:06:15 +03:00

145 lines
6.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controllers/payment_receipt_controller.dart';
class PaymentReceiptView extends StatelessWidget {
const PaymentReceiptView({super.key});
@override
Widget build(BuildContext context) {
final controller = Get.put(PaymentReceiptController());
final isDark = Theme.of(context).brightness == Brightness.dark;
return Scaffold(
backgroundColor: isDark ? const Color(0xFF121212) : const Color(0xFFF5F7FA),
appBar: AppBar(
title: const Text('إتمام الدفع', style: TextStyle(fontWeight: FontWeight.bold)),
backgroundColor: isDark ? const Color(0xFF1E1E2E) : const Color(0xFF0F4C81),
foregroundColor: Colors.white,
elevation: 0,
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
// Payment Info Card
Obx(() => Container(
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
color: isDark ? const Color(0xFF1E1E2E) : Colors.white,
borderRadius: BorderRadius.circular(16),
border: Border.all(color: isDark ? Colors.white10 : Colors.grey.shade200),
),
child: Column(
children: [
const Text('تفاصيل التحويل المطلوب', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16)),
const SizedBox(height: 16),
_buildInfoRow('الاسم المستعار (CliQ)', controller.payment['cliq_alias'] ?? '', isDark, isHighlight: true),
const Divider(height: 24),
_buildInfoRow('المبلغ المطلوب', '${controller.payment['amount_jod'] ?? 0} JOD', isDark),
],
),
)),
const SizedBox(height: 24),
Text('الخطوة التالية:', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16, color: isDark ? Colors.white : Colors.black87)),
const SizedBox(height: 8),
Text(
'قم بتحويل المبلغ عبر تطبيق البنك الخاص بك إلى الاسم المستعار المذكور أعلاه (CliQ). بعد إتمام الحوالة بنجاح، ستصلك رسالة أو إشعار من البنك يحتوي على "رقم المرجع" للعملية. انسخه والصقه هنا.',
style: TextStyle(fontSize: 13, color: isDark ? Colors.white70 : Colors.grey.shade700, height: 1.5),
),
const SizedBox(height: 24),
// Reference Number Input Area
Container(
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
color: isDark ? const Color(0xFF1E1E2E) : Colors.white,
borderRadius: BorderRadius.circular(16),
border: Border.all(color: isDark ? Colors.white10 : Colors.grey.shade200),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text('رقم المرجع (Reference Number)', style: TextStyle(fontWeight: FontWeight.bold)),
const SizedBox(height: 12),
TextField(
controller: controller.referenceController,
decoration: InputDecoration(
hintText: 'مثال: 1234567890',
hintStyle: TextStyle(color: isDark ? Colors.white38 : Colors.grey),
filled: true,
fillColor: isDark ? const Color(0xFF1A1A2E) : const Color(0xFFF1F5F9),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12),
borderSide: BorderSide.none,
),
contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
),
keyboardType: TextInputType.text,
style: TextStyle(
fontFamily: 'monospace',
color: isDark ? Colors.white : Colors.black87,
),
),
],
),
),
const SizedBox(height: 32),
// Submit Button
SizedBox(
height: 52,
child: Obx(() => ElevatedButton.icon(
onPressed: controller.isUploading.value
? null
: () => controller.submitReference(),
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF0F4C81),
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
disabledBackgroundColor: isDark ? Colors.white10 : Colors.grey.shade300,
),
icon: controller.isUploading.value
? const SizedBox(width: 20, height: 20, child: CircularProgressIndicator(strokeWidth: 2, color: Colors.white))
: const Icon(Icons.check_circle_outline),
label: Text(
controller.isUploading.value ? 'جاري التحقق...' : 'تأكيد الدفع',
style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
),
)),
),
],
),
),
);
}
Widget _buildInfoRow(String label, String value, bool isDark, {bool isHighlight = false}) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(label, style: TextStyle(fontSize: 13, color: isDark ? Colors.white70 : Colors.grey.shade600)),
Container(
padding: EdgeInsets.symmetric(horizontal: isHighlight ? 12 : 0, vertical: isHighlight ? 6 : 0),
decoration: isHighlight ? BoxDecoration(
color: const Color(0xFF0F4C81).withOpacity(0.1),
borderRadius: BorderRadius.circular(8),
) : null,
child: Text(
value,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15,
color: isHighlight ? const Color(0xFF0F4C81) : (isDark ? Colors.white : Colors.black87),
fontFamily: 'monospace',
),
),
),
],
);
}
}