import 'package:flutter/material.dart'; class CustomTextField extends StatefulWidget { final TextEditingController controller; final String label; final String? hint; final IconData? prefixIcon; final Widget? suffixIcon; final bool isPassword; final bool readOnly; final bool enabled; final TextInputType keyboardType; final int maxLines; final String? Function(String?)? validator; final void Function(String)? onChanged; final VoidCallback? onTap; final Color borderColor; final Color focusColor; const CustomTextField({ super.key, required this.controller, required this.label, this.hint, this.prefixIcon, this.suffixIcon, this.isPassword = false, this.readOnly = false, this.enabled = true, this.keyboardType = TextInputType.text, this.maxLines = 1, this.validator, this.onChanged, this.onTap, this.borderColor = Colors.grey, this.focusColor = Colors.blue, }); @override State createState() => _CustomTextFieldState(); } class _CustomTextFieldState extends State { bool obscureText = true; @override Widget build(BuildContext context) { return TextFormField( controller: widget.controller, obscureText: widget.isPassword ? obscureText : false, readOnly: widget.readOnly, enabled: widget.enabled, keyboardType: widget.keyboardType, maxLines: widget.isPassword ? 1 : widget.maxLines, validator: widget.validator, onChanged: widget.onChanged, onTap: widget.onTap, decoration: InputDecoration( labelText: widget.label, hintText: widget.hint, prefixIcon: widget.prefixIcon != null ? Icon(widget.prefixIcon) : null, suffixIcon: widget.isPassword ? IconButton( icon: Icon( obscureText ? Icons.visibility_off : Icons.visibility, ), onPressed: () { setState(() { obscureText = !obscureText; }); }, ) : widget.suffixIcon, border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: widget.borderColor), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: widget.borderColor), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: widget.focusColor, width: 2), ), ), ); } }