Files
eatvio_app/lib/widgets/custom_edit_text_form_field.dart

155 lines
3.9 KiB
Dart

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 = false,
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<TextInputFormatter>? 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<String>? validator;
final void Function(String?)? onSaved;
final ValueChanged<String>? 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),
),
);
}
}