/// Invoice Section Widget /// /// Optional invoice information form section. library; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:worker/core/constants/ui_constants.dart'; import 'package:worker/core/theme/colors.dart'; import 'package:worker/features/cart/presentation/widgets/checkout_text_field.dart'; /// Invoice Section /// /// Collects invoice/VAT information when checkbox is enabled. class InvoiceSection extends HookWidget { final ValueNotifier needsInvoice; final TextEditingController companyNameController; final TextEditingController taxIdController; final TextEditingController companyAddressController; final TextEditingController companyEmailController; const InvoiceSection({ super.key, required this.needsInvoice, required this.companyNameController, required this.taxIdController, required this.companyAddressController, required this.companyEmailController, }); @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: [ // Invoice Checkbox Row( children: [ Checkbox( value: needsInvoice.value, onChanged: (value) { needsInvoice.value = value ?? false; }, activeColor: AppColors.primaryBlue, ), const Expanded( child: Text( 'Xuất hóa đơn VAT', style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xFF212121), ), ), ), ], ), // Invoice Fields (visible when checkbox is checked) if (needsInvoice.value) ...[ const SizedBox(height: AppSpacing.md), // Company Name CheckoutTextField( label: 'Tên công ty', controller: companyNameController, required: true, validator: (value) { if (needsInvoice.value && (value == null || value.isEmpty)) { return 'Vui lòng nhập tên công ty'; } return null; }, ), const SizedBox(height: AppSpacing.md), // Tax ID CheckoutTextField( label: 'Mã số thuế', controller: taxIdController, required: true, keyboardType: TextInputType.number, validator: (value) { if (needsInvoice.value && (value == null || value.isEmpty)) { return 'Vui lòng nhập mã số thuế'; } return null; }, ), const SizedBox(height: AppSpacing.md), // Company Address CheckoutTextField( label: 'Địa chỉ công ty', controller: companyAddressController, required: true, maxLines: 2, validator: (value) { if (needsInvoice.value && (value == null || value.isEmpty)) { return 'Vui lòng nhập địa chỉ công ty'; } return null; }, ), const SizedBox(height: AppSpacing.md), // Company Email CheckoutTextField( label: 'Email nhận hóa đơn', controller: companyEmailController, required: true, keyboardType: TextInputType.emailAddress, validator: (value) { if (needsInvoice.value && (value == null || value.isEmpty)) { return 'Vui lòng nhập email'; } if (needsInvoice.value && !RegExp( r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$', ).hasMatch(value!)) { return 'Email không hợp lệ'; } return null; }, ), ], ], ), ); } }