import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class CustomTextField extends StatefulWidget { final bool? showPassword; final bool numeric; final String hint; final String label; final int? lines; final ValueChanged? onChanged; final int? length; final TextEditingController? controller; const CustomTextField({ super.key, this.showPassword, this.numeric = false, this.hint = '', this.label = '', this.lines, this.length, this.onChanged, this.controller, }); @override State createState() => CustomTextFieldState(); } class CustomTextFieldState extends State { late bool _showPassword; @override void initState() { super.initState(); _showPassword = widget.showPassword ?? true; } @override Widget build(BuildContext context) { return Column( spacing: 8, children: [ if (widget.label.isNotEmpty) Align( alignment: Alignment.bottomLeft, child: Text( widget.label, style: const TextStyle(fontSize: 14, letterSpacing: 0), ), ), TextFormField( controller: widget.controller, keyboardType: widget.numeric ? TextInputType.number : TextInputType.text, obscureText: !_showPassword, enableSuggestions: _showPassword, autocorrect: !_showPassword, style: const TextStyle(color: Color(0xFF4B4B4B)), inputFormatters: widget.numeric ? [FilteringTextInputFormatter.digitsOnly] : const [], decoration: InputDecoration( counterText: "", hintText: widget.hint, border: const OutlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(12)), borderSide: BorderSide(color: Color(0xFF4B4B4B)), gapPadding: 16, ), suffixIcon: widget.showPassword != null ? IconButton( icon: Icon( _showPassword ? Icons.visibility_off : Icons.visibility, ), onPressed: () { setState(() { _showPassword = !_showPassword; }); }, ) : null, ), minLines: widget.lines ?? 1, maxLines: widget.lines ?? 1, maxLength: widget.length, onChanged: widget.onChanged, ), ], ); } }