chitfund/luckychit/lib/shared/widgets/payment_success_dialog.dart

196 lines
5.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../core/utils/whatsapp_util.dart';
import 'whatsapp_share_button.dart';
/// Payment success dialog with WhatsApp sharing
class PaymentSuccessDialog extends StatelessWidget {
final String paymentId;
final double amount;
final String groupName;
final String transactionId;
final DateTime paymentDate;
final String paymentMethod;
const PaymentSuccessDialog({
super.key,
required this.paymentId,
required this.amount,
required this.groupName,
required this.transactionId,
required this.paymentDate,
required this.paymentMethod,
});
static Future<void> show(
BuildContext context, {
required String paymentId,
required double amount,
required String groupName,
required String transactionId,
required DateTime paymentDate,
required String paymentMethod,
}) {
return showDialog(
context: context,
barrierDismissible: false,
builder: (context) => PaymentSuccessDialog(
paymentId: paymentId,
amount: amount,
groupName: groupName,
transactionId: transactionId,
paymentDate: paymentDate,
paymentMethod: paymentMethod,
),
);
}
@override
Widget build(BuildContext context) {
return Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24.r),
),
child: Container(
padding: EdgeInsets.all(24.w),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
// Success icon with animation
TweenAnimationBuilder<double>(
tween: Tween(begin: 0.0, end: 1.0),
duration: const Duration(milliseconds: 600),
curve: Curves.elasticOut,
builder: (context, value, child) {
return Transform.scale(
scale: value,
child: child,
);
},
child: Container(
width: 80.w,
height: 80.h,
decoration: BoxDecoration(
color: Colors.green.shade50,
shape: BoxShape.circle,
),
child: Icon(
Icons.check_circle_rounded,
size: 50.w,
color: Colors.green.shade600,
),
),
),
SizedBox(height: 20.h),
// Title
Text(
'Payment Successful!',
style: TextStyle(
fontSize: 22.sp,
fontWeight: FontWeight.bold,
color: Colors.green.shade700,
),
textAlign: TextAlign.center,
),
SizedBox(height: 8.h),
// Amount
Text(
'${amount.toStringAsFixed(2)}',
style: TextStyle(
fontSize: 32.sp,
fontWeight: FontWeight.bold,
color: Colors.grey.shade800,
),
),
SizedBox(height: 20.h),
// Payment details
Container(
padding: EdgeInsets.all(16.w),
decoration: BoxDecoration(
color: Colors.grey.shade50,
borderRadius: BorderRadius.circular(12.r),
),
child: Column(
children: [
_buildDetailRow('Group', groupName),
SizedBox(height: 8.h),
_buildDetailRow('Transaction ID', transactionId),
SizedBox(height: 8.h),
_buildDetailRow(
'Date',
'${paymentDate.day}/${paymentDate.month}/${paymentDate.year}',
),
SizedBox(height: 8.h),
_buildDetailRow('Method', paymentMethod.toUpperCase()),
],
),
),
SizedBox(height: 24.h),
// WhatsApp share button
WhatsAppShareButton(
label: 'Share Receipt on WhatsApp',
onPressed: () async {
final success = await WhatsAppUtil.sharePaymentReceipt(paymentId);
if (success) {
Get.back(); // Close dialog
}
},
),
SizedBox(height: 12.h),
// Close button
SizedBox(
width: double.infinity,
child: OutlinedButton(
onPressed: () => Get.back(),
style: OutlinedButton.styleFrom(
padding: EdgeInsets.symmetric(vertical: 14.h),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.r),
),
),
child: Text(
'Close',
style: TextStyle(
fontSize: 16.sp,
fontWeight: FontWeight.w600,
),
),
),
),
],
),
),
);
}
Widget _buildDetailRow(String label, String value) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
label,
style: TextStyle(
fontSize: 14.sp,
color: Colors.grey.shade600,
),
),
Text(
value,
style: TextStyle(
fontSize: 14.sp,
fontWeight: FontWeight.w600,
color: Colors.grey.shade800,
),
),
],
);
}
}