import 'package:flutter/material.dart'; class CommonTextFormField extends StatelessWidget { final String? hintText; final TextEditingController? controller; final String? Function(String?)? validator; final bool obscureText; final Widget? prefixIcon; final Widget? suffixIcon; final TextInputType? keyboardType; final String? errorText; final void Function(String)? onChanged; final int? maxLines; final int? minLines; final bool expands; const CommonTextFormField({ super.key, this.hintText, this.controller, this.validator, this.obscureText = false, this.prefixIcon, this.suffixIcon, this.keyboardType, this.errorText, this.onChanged, this.maxLines, this.minLines, this.expands = false, }); @override Widget build(BuildContext context) { final bool isMultiline = (maxLines != null && maxLines! > 1) || expands; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: 360, height: isMultiline ? null : 57.89, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16.28), border: Border.all( color: errorText != null ? Colors.red : const Color(0xFFBDBCBC), width: 0.9, ), ), child: TextFormField( controller: controller, validator: validator, obscureText: obscureText, keyboardType: keyboardType ?? (isMultiline ? TextInputType.multiline : TextInputType.text), onChanged: onChanged, maxLines: expands ? null : maxLines ?? 1, minLines: expands ? null : minLines, expands: expands, decoration: InputDecoration( contentPadding: const EdgeInsets.symmetric( horizontal: 16, vertical: 18, ), hintText: hintText, border: InputBorder.none, prefixIcon: prefixIcon, suffixIcon: suffixIcon, errorStyle: const TextStyle(height: 0), ), ), ), if (errorText != null) Padding( padding: const EdgeInsets.only(left: 16.0, top: 4.0), child: Text( errorText!, style: const TextStyle(color: Colors.red, fontSize: 12), ), ), ], ); } }