import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class CustomTextFormField extends StatelessWidget { CustomTextFormField({ Key? key, this.alignment, this.width, this.controller, this.focusNode, this.autofocus = true, this.textStyle, this.obscureText = false, this.textInputAction = TextInputAction.next, this.textInputType = TextInputType.text, this.maxLines, this.hintText, this.hintStyle, this.prefix, this.prefixConstraints, this.suffix, this.suffixConstraints, this.onFieldSubmitted, this.initialValue, this.contentPadding, this.inputFormatters, this.borderDecoration, this.fillColor, this.filled = true, this.validator, this.keyboardType, this.onChanged, this.onSaved, }) : super( key: key, ); final Alignment? alignment; final double? width; final TextEditingController? controller; final FocusNode? focusNode; final bool? autofocus; final TextStyle? textStyle; final bool? obscureText; final List? inputFormatters; final TextInputAction? textInputAction; final TextInputType? textInputType; final int? maxLines; final String? hintText; final TextStyle? hintStyle; final Widget? prefix; final BoxConstraints? prefixConstraints; final Widget? suffix; final Function(String)? onFieldSubmitted; final BoxConstraints? suffixConstraints; final EdgeInsets? contentPadding; final InputBorder? borderDecoration; final Color? fillColor; final bool? filled; final TextInputType? keyboardType; final String? initialValue; final FormFieldValidator? validator; final void Function(String?)? onSaved; final ValueChanged? onChanged; @override Widget build(BuildContext context) { return alignment != null ? Align( alignment: alignment ?? Alignment.center, child: _buildTextFormFieldWidget(context), ) : _buildTextFormFieldWidget(context); } _buildTextFormFieldWidget(BuildContext context) { return SizedBox( width: width ?? double.maxFinite, child: TextFormField( controller: controller, focusNode: focusNode ?? FocusNode(), autofocus: autofocus!, style: textStyle ?? Theme.of(context).textTheme.titleMedium, obscureText: obscureText!, textInputAction: textInputAction, maxLines: maxLines ?? 1, decoration: _buildInputDecoration(context), validator: validator, keyboardType: keyboardType, onSaved: onSaved, onChanged: onChanged, onFieldSubmitted: onFieldSubmitted, inputFormatters: inputFormatters, initialValue: initialValue, ), ); } InputDecoration _buildInputDecoration(BuildContext context) { return InputDecoration( hintText: hintText ?? "", hintStyle: hintStyle ?? Theme.of(context).textTheme.bodyLarge, prefixIcon: prefix, prefixIconConstraints: prefixConstraints, suffixIcon: suffix, suffixIconConstraints: suffixConstraints, isDense: true, contentPadding: contentPadding ?? EdgeInsets.all(6), fillColor: fillColor ?? Theme.of(context).colorScheme.onPrimary, filled: filled, border: borderDecoration ?? OutlineInputBorder( borderRadius: const BorderRadius.all(Radius.circular(8)), borderSide: BorderSide(color: Colors.grey, width: 1), ), enabledBorder: borderDecoration ?? OutlineInputBorder( borderRadius: const BorderRadius.all(Radius.circular(8)), borderSide: BorderSide(color: Colors.grey, width: 1), ), focusedBorder: borderDecoration ?? OutlineInputBorder( borderRadius: const BorderRadius.all(Radius.circular(8)), borderSide: BorderSide(color: Colors.grey, width: 1), ), ); } }