/// Payment Method Section Widget /// /// Payment method selection with two options: /// 1. Full payment via bank transfer /// 2. Partial payment (>=20%, 30 day terms) library; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:worker/core/constants/ui_constants.dart'; import 'package:worker/core/theme/colors.dart'; /// Payment Method Section /// /// Two payment options matching checkout.html design. class PaymentMethodSection extends HookWidget { final ValueNotifier paymentMethod; const PaymentMethodSection({super.key, required this.paymentMethod}); @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.symmetric(horizontal: AppSpacing.md), padding: const EdgeInsets.all(AppSpacing.md), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(AppRadius.card), boxShadow: [ BoxShadow( color: Colors.black.withValues(alpha: 0.05), blurRadius: 8, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Section Title const Text( 'Phương thức thanh toán', style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: Color(0xFF212121), ), ), const SizedBox(height: AppSpacing.md), // Full Payment Option InkWell( onTap: () => paymentMethod.value = 'full_payment', child: Padding( padding: const EdgeInsets.symmetric(vertical: 8), child: Row( children: [ Radio( value: 'full_payment', groupValue: paymentMethod.value, onChanged: (value) { paymentMethod.value = value!; }, activeColor: AppColors.primaryBlue, ), const SizedBox(width: 12), const Icon( FontAwesomeIcons.buildingColumns, color: AppColors.grey500, size: 24, ), const SizedBox(width: 12), const Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Thanh toán hoàn toàn', style: TextStyle( fontSize: 15, fontWeight: FontWeight.w500, ), ), SizedBox(height: 4), Text( 'Thanh toán qua tài khoản ngân hàng', style: TextStyle( fontSize: 13, color: AppColors.grey500, ), ), ], ), ), ], ), ), ), const Divider(height: 1), // Partial Payment Option InkWell( onTap: () => paymentMethod.value = 'partial_payment', child: Padding( padding: const EdgeInsets.symmetric(vertical: 8), child: Row( children: [ Radio( value: 'partial_payment', groupValue: paymentMethod.value, onChanged: (value) { paymentMethod.value = value!; }, activeColor: AppColors.primaryBlue, ), const SizedBox(width: 12), const Icon( FontAwesomeIcons.creditCard, color: AppColors.grey500, size: 24, ), const SizedBox(width: 12), const Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Thanh toán một phần', style: TextStyle( fontSize: 15, fontWeight: FontWeight.w500, ), ), SizedBox(height: 4), Text( 'Trả trước(≥20%), còn lại thanh toán trong vòng 30 ngày', style: TextStyle( fontSize: 13, color: AppColors.grey500, ), ), ], ), ), ], ), ), ), ], ), ); } }