145 lines
6.5 KiB
Dart
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',
|
|
),
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|