import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import '../../../core/constants/assets.dart'; import '../../../core/theme/colors.dart'; import '../../../core/utils/size_config.dart'; class LoginTextField extends StatelessWidget { final TextEditingController controller; final FocusNode focusNode; final String label; final String iconPath; final bool isPassword; final bool obscureText; final double? borderRedus; final double? fieldHeight; final double? prefixIconPadding; final VoidCallback? onToggleVisibility; const LoginTextField({ required this.controller, required this.focusNode, required this.label, required this.iconPath, super.key, this.isPassword = false, this.obscureText = false, this.fieldHeight, this.onToggleVisibility, this.borderRedus, this.prefixIconPadding, }); @override Widget build(BuildContext context) { return SizedBox( height: fieldHeight ?? 55.0.h(), child: TextField( controller: controller, focusNode: focusNode, obscureText: isPassword ? obscureText : false, decoration: InputDecoration( contentPadding: EdgeInsets.symmetric( vertical: (fieldHeight != null ? (fieldHeight! / 2.8) : 16.0).h(), horizontal: 12.0.w(), ), labelText: label, prefixIcon: Padding( padding: EdgeInsets.all(prefixIconPadding ?? 12.0.w()), child: SvgPicture.asset( iconPath, width: 24.0.w(), height: 24.0.h(), colorFilter: ColorFilter.mode( focusNode.hasFocus ? AppColors.grey80 : AppColors.grey60, BlendMode.srcIn, ), ), ), suffixIcon: isPassword ? IconButton( onPressed: onToggleVisibility, icon: SvgPicture.asset( obscureText ? AssetsManager.passwordVisibility : AssetsManager.passwordVisibilityOff, width: 24.0.w(), height: 24.0.h(), colorFilter: ColorFilter.mode( focusNode.hasFocus ? AppColors.grey80 : AppColors.grey60, BlendMode.srcIn, ), ), ) : null, border: OutlineInputBorder( borderRadius: BorderRadius.circular(borderRedus ?? 12.0.w()), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: AppColors.borderBlue), borderRadius: BorderRadius.circular(borderRedus ?? 12.0.w()), ), ), ), ); } }