import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; enum InputTypes { text, number } class FormTextInput extends StatelessWidget { const FormTextInput( {super.key, required this.controller, required this.title, this.icon, this.maxLines, this.minLines, this.onTap, this.requiresValidation = true, this.type = InputTypes.text, this.hint, this.validations}); final TextEditingController controller; final String title; final int? maxLines; final int? minLines; final Icon? icon; final dynamic onTap; final bool requiresValidation; final InputTypes type; final String? hint; final Function? validations; @override Widget build(BuildContext context) { final Map params = {}; if (type == InputTypes.number) { params['keyboardType'] = TextInputType.number; params['inputFormatters'] = [ FilteringTextInputFormatter.digitsOnly ]; } return Padding( padding: EdgeInsets.only(top: 10, bottom: 10), child: TextFormField( keyboardType: params['keyboardType'] ?? TextInputType.text, inputFormatters: params['inputFormatters'] ?? [], minLines: minLines ?? 1, maxLines: maxLines ?? 1, controller: controller, decoration: InputDecoration( filled: true, prefixIcon: icon ?? Icon(Icons.draw_rounded), border: OutlineInputBorder( borderSide: BorderSide.none, borderRadius: BorderRadius.circular(12)), labelText: title, hintText: hint ?? '', ), validator: (String? value) { if (requiresValidation == true) { if (value == null || value.isEmpty) { return 'Please enter some text'; } if (validations != null) validations!(value); // if (value.length < 3) { // return 'Please enter a minimum of 3 characters'; // } } return null; }, onTap: () { if (onTap != null) { onTap(); } })); } }