import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import '../utils/colors.dart'; class CustomTextField extends StatefulWidget { final String label; final TextEditingController controller; final bool obscure; final TextInputType? keyboardType; final List? inputFormatters; final int? maxLength; final String? Function(String?)? validator; const CustomTextField({ super.key, required this.label, required this.controller, this.obscure = false, this.keyboardType, this.inputFormatters, this.maxLength, this.validator, }); @override State createState() => _CustomTextFieldState(); } class _CustomTextFieldState extends State { late bool _obscureText; @override void initState() { super.initState(); _obscureText = widget.obscure; } @override Widget build(BuildContext context) { return Semantics( label: "Input ${widget.label}", child: TextField( controller: widget.controller, obscureText: _obscureText, keyboardType: widget.keyboardType, inputFormatters: widget.inputFormatters, maxLength: widget.maxLength, style: TextStyle(color: AppColors.text), decoration: InputDecoration( labelText: widget.label, labelStyle: TextStyle(color: AppColors.text), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: AppColors.text), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: AppColors.primary), ), // ============ TOGGLE PASSWORD VISIBILITY ============ suffixIcon: widget.obscure ? IconButton( onPressed: () { setState(() { _obscureText = !_obscureText; }); }, icon: Icon( _obscureText ? Icons.visibility_off : Icons.visibility, color: AppColors.text, ), ) : null, ), ), ); } }