/// Checkout Text Field Widget /// /// Reusable text field for checkout forms. library; import 'package:flutter/material.dart'; import 'package:worker/core/constants/ui_constants.dart'; import 'package:worker/core/theme/colors.dart'; /// Checkout Text Field /// /// Styled text field with label, validation, and optional features. class CheckoutTextField extends StatelessWidget { final String label; final TextEditingController controller; final bool required; final String? hintText; final int maxLines; final TextInputType? keyboardType; final String? Function(String?)? validator; const CheckoutTextField({ super.key, required this.label, required this.controller, required this.required, this.hintText, this.maxLines = 1, this.keyboardType, this.validator, }); @override Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ RichText( text: TextSpan( text: label, style: TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: colorScheme.onSurface, ), children: [ if (required) const TextSpan( text: ' *', style: TextStyle(color: AppColors.danger), ), ], ), ), const SizedBox(height: 8), TextFormField( controller: controller, maxLines: maxLines, keyboardType: keyboardType, validator: validator, decoration: InputDecoration( hintText: hintText ?? 'Nhập $label', hintStyle: TextStyle( color: colorScheme.onSurfaceVariant.withValues(alpha: 0.6), fontSize: 14, ), filled: true, fillColor: colorScheme.surfaceContainerLowest, contentPadding: const EdgeInsets.symmetric( horizontal: 16, vertical: 12, ), border: OutlineInputBorder( borderRadius: BorderRadius.circular(AppRadius.input), borderSide: BorderSide(color: colorScheme.outlineVariant), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(AppRadius.input), borderSide: BorderSide(color: colorScheme.outlineVariant), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(AppRadius.input), borderSide: BorderSide( color: colorScheme.primary, width: 2, ), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(AppRadius.input), borderSide: const BorderSide(color: AppColors.danger), ), focusedErrorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(AppRadius.input), borderSide: const BorderSide(color: AppColors.danger, width: 2), ), ), ), ], ); } }