import 'package:flutter/material.dart'; import '../utils/constants.dart'; class CustomTextField extends StatelessWidget { final TextEditingController? controller; final String? labelText; final String? hintText; final IconData? prefixIcon; final Widget? suffixIcon; final bool obscureText; final TextInputType? keyboardType; final String? Function(String?)? validator; final int? maxLines; final int? maxLength; final bool enabled; final VoidCallback? onTap; final void Function(String)? onChanged; const CustomTextField({ super.key, this.controller, this.labelText, this.hintText, this.prefixIcon, this.suffixIcon, this.obscureText = false, this.keyboardType, this.validator, this.maxLines = 1, this.maxLength, this.enabled = true, this.onTap, this.onChanged, }); @override Widget build(BuildContext context) { return TextFormField( controller: controller, obscureText: obscureText, keyboardType: keyboardType, validator: validator, maxLines: maxLines, maxLength: maxLength, enabled: enabled, onTap: onTap, onChanged: onChanged, style: const TextStyle( color: AppColors.textPrimary, fontSize: 16, ), decoration: InputDecoration( labelText: labelText, hintText: hintText, prefixIcon: prefixIcon != null ? Icon( prefixIcon, color: AppColors.textSecondary, size: 20, ) : null, suffixIcon: suffixIcon, border: OutlineInputBorder( borderRadius: BorderRadius.circular(AppSizes.radiusMedium), borderSide: const BorderSide(color: AppColors.divider), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(AppSizes.radiusMedium), borderSide: const BorderSide(color: AppColors.divider), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(AppSizes.radiusMedium), borderSide: const BorderSide(color: AppColors.primary, width: 2), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(AppSizes.radiusMedium), borderSide: const BorderSide(color: AppColors.error), ), focusedErrorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(AppSizes.radiusMedium), borderSide: const BorderSide(color: AppColors.error, width: 2), ), filled: true, fillColor: enabled ? AppColors.surface : AppColors.background, contentPadding: const EdgeInsets.symmetric( horizontal: AppSizes.paddingMedium, vertical: AppSizes.paddingMedium, ), labelStyle: const TextStyle(color: AppColors.textSecondary), hintStyle: const TextStyle(color: AppColors.textSecondary), errorStyle: const TextStyle(color: AppColors.error), ), ); } }