import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import '../../utils/colors.dart'; class PasswordWidget extends StatefulWidget { final String? label; final String? hintText; final TextEditingController? controller; final Function(String)? onChanged; final String? Function(String?)? validator; final bool enabled; final bool isArabic; final IconData? prefixIcon; final double borderRadius; final EdgeInsets? padding; const PasswordWidget({ super.key, this.label, this.hintText = 'Enter your password', this.controller, this.onChanged, this.validator, this.enabled = true, this.isArabic = false, this.prefixIcon = Icons.lock_outline, this.borderRadius = 12.0, this.padding, }); @override State createState() => _PasswordWidgetState(); } class _PasswordWidgetState extends State { bool _isPasswordVisible = false; late TextEditingController _controller; @override void initState() { super.initState(); _controller = widget.controller ?? TextEditingController(); } @override void dispose() { if (widget.controller == null) { _controller.dispose(); } super.dispose(); } @override Widget build(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ if (widget.label != null) ...[ Text( widget.label!, style: TextStyle( color: AppNewColors.grayTxtColor, fontSize: 14, fontFamily: widget.isArabic ? "Readex_Pro" : 'Inter', fontWeight: FontWeight.w500, height: 1.33, ), ), const SizedBox(height: 8), ], Container( decoration: BoxDecoration( color: AppNewColors.inputColor, borderRadius: BorderRadius.circular(widget.borderRadius), boxShadow: const [ BoxShadow( color: Color(0x07000000), blurRadius: 1, offset: Offset(0, 1), spreadRadius: -0.50, ), ], ), child: TextFormField( controller: _controller, obscureText: !_isPasswordVisible, enabled: widget.enabled, onChanged: widget.onChanged, validator: widget.validator, style: TextStyle( color: AppNewColors.grayTxtColor, fontSize: 14, fontFamily: widget.isArabic ? "Readex_Pro" : 'Inter', fontWeight: FontWeight.w500, height: 1.33, ), decoration: InputDecoration( hintText: widget.hintText, hintStyle: const TextStyle( color: AppNewColors.inputTextColor, fontSize: 16, fontWeight: FontWeight.w500, ), prefixIcon: Padding( padding: const EdgeInsets.all(14.0), child: SvgPicture.asset( 'assets/images/New/Key.svg', ), ), suffixIcon: IconButton( icon: Icon( _isPasswordVisible ? Icons.visibility : Icons.visibility_off, color: AppNewColors.inputTextColor, size: 20, ), onPressed: () { setState(() { _isPasswordVisible = !_isPasswordVisible; }); }, ), border: InputBorder.none, contentPadding: widget.padding ?? const EdgeInsets.symmetric(horizontal: 16, vertical: 12), ), ), ), ], ); } }