import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class NumberTextInputFormatter extends TextInputFormatter { @override TextEditingValue formatEditUpdate( TextEditingValue oldValue, TextEditingValue newValue) { final int newTextLength = newValue.text.length; int selectionIndex = newValue.selection.end; int usedSubstringIndex = 0; final StringBuffer newText = StringBuffer(); if (newTextLength >= 1) { newText.write('('); if (newValue.selection.end >= 1) selectionIndex++; } if (newTextLength >= 4) { newText.write(newValue.text.substring(0, usedSubstringIndex = 3) + ') '); if (newValue.selection.end >= 3) selectionIndex += 2; } if (newTextLength >= 7) { newText.write(newValue.text.substring(3, usedSubstringIndex = 6) + '-'); if (newValue.selection.end >= 6) selectionIndex++; } if (newTextLength >= 11) { newText.write(newValue.text.substring(6, usedSubstringIndex = 10) + ' '); if (newValue.selection.end >= 10) selectionIndex++; } // Dump the rest. if (newTextLength >= usedSubstringIndex) newText.write(newValue.text.substring(usedSubstringIndex)); return TextEditingValue( text: newText.toString(), selection: TextSelection.collapsed(offset: selectionIndex), ); } } final _mobileFormatter = NumberTextInputFormatter(); // class TextFields extends StatefulWidget { // TextFields( // {Key? key, // this.type, // this.hintText, // this.suffixIcon, // this.autoFocus, // this.onChanged, // this.initialValue, // this.minLines, // this.maxLines, // this.inputFormatters, // this.padding, // this.focus = false, // this.maxLengthEnforced = true, // this.suffixIconColor, // this.inputAction, // this.onSubmit, // this.keepPadding = true, // this.textCapitalization = TextCapitalization.none, // this.controller, // this.keyboardType, // this.validator, // this.borderOnlyError = false, // this.onSaved, // this.onSuffixTap, // this.readOnly= false, // this.maxLength, // this.prefixIcon, // this.bare = false, // this.onTap, // this.fontSize = 16.0, // this.fontWeight = FontWeight.w700, // this.fillColor, // this.hintColor}) // : super(key: key); // // final String? hintText; // final String? initialValue; // final String? type; // final bool? autoFocus; // final IconData? suffixIcon; // final Color? suffixIconColor; // final Icon? prefixIcon; // final VoidCallback? onTap; // final TextEditingController? controller; // final TextInputType? keyboardType; // final FormFieldValidator? validator; // final Function? onSaved; // final Function? onSuffixTap; // final Function? onChanged; // final Function? onSubmit; // final bool? readOnly; // final int? maxLength; // final int? minLines; // final int? maxLines; // final bool? maxLengthEnforced; // final bool? bare; // final TextInputAction? inputAction; // final double? fontSize; // final FontWeight? fontWeight; // final bool? keepPadding; // final TextCapitalization? textCapitalization; // final List? inputFormatters; // final EdgeInsets? padding; // final bool? focus; // final bool? borderOnlyError; // final Color? hintColor; // final Color? fillColor; // // @override // _TextFieldsState createState() => _TextFieldsState(); // } // // class _TextFieldsState extends State { // final FocusNode _focusNode = FocusNode(); // bool? focus = false; // bool? view = false; // // @override // void initState() { // super.initState(); // _focusNode.addListener(() { // setState(() { // focus = _focusNode.hasFocus; // }); // }); // } // // @override // void didUpdateWidget(TextFields oldWidget) { // if (widget.focus != null) _focusNode.requestFocus(); // super.didUpdateWidget(oldWidget); // } // // @override // void dispose() { // _focusNode.dispose(); // super.dispose(); // } // // Widget _buildSuffixIcon() { // switch (widget.type) { // case "password": // return Padding( // padding: const EdgeInsets.only(right: 8.0), // child: view! // ? InkWell( // onTap: () { // this.setState( // () { // view = false; // }, // ); // }, // child: Icon( // Icons.remove_red_eye_sharp, // size: 24.0, // color: Color.fromRGBO(78, 62, 253, 1.0), // ), // ) // : InkWell( // onTap: () { // this.setState(() { // view = true; // }); // }, // child: Icon(Icons.remove_red_eye_sharp, // size: 24.0, color: Colors.grey[500]), // ), // ); // default: // if (widget.suffixIcon != null) // return InkWell( // onTap: widget.onSuffixTap, // child: Icon(widget.suffixIcon, // size: 22.0, // color: widget.suffixIconColor != null // ? widget.suffixIconColor // : Colors.grey[500]), // ); // else // return null; // } // } // // bool _determineReadOnly() { // if (widget.readOnly != null && widget.readOnly!) { // _focusNode.unfocus(); // return true; // } else { // return false; // } // } // // @override // Widget build(BuildContext context) { // return (AnimatedContainer( // duration: Duration(milliseconds: 300), // decoration: widget.bare! // ? null // : BoxDecoration(boxShadow: [ // // BoxShadow( // // color: Color.fromRGBO(70, 68, 167, focus ? 0.20 : 0), // // offset: Offset(0.0, 13.0), // // blurRadius: focus ? 34.0 : 12.0) // BoxShadow( // color: Color.fromRGBO(110, 68, 80, focus ? 0.20 : 0), // offset: Offset(0.0, 13.0), // blurRadius: focus ? 34.0 : 12.0) // ]), // child: TextFormField( // keyboardAppearance: Theme.of(context).brightness, // scrollPhysics: BouncingScrollPhysics(), // textCapitalization: widget.textCapitalization, // onFieldSubmitted: widget.inputAction == TextInputAction.next // ? (widget.onSubmit != null // ? widget.onSubmit // : (val) { // _focusNode.nextFocus(); // }) // : widget.onSubmit, // textInputAction: widget.inputAction, // minLines: widget.minLines ?? 1, // maxLines: widget.maxLines ?? 1, // // maxLengthEnforcement: widget.maxLengthEnforced, // initialValue: widget.initialValue, // onChanged: widget.onChanged, // focusNode: _focusNode, // maxLength: widget.maxLength ?? null, // controller: widget.controller, // keyboardType: widget.keyboardType, // readOnly: _determineReadOnly(), // obscureText: widget.type == "password" && !view ? true : false, // autofocus: widget.autoFocus ?? false, // validator: widget.validator, // onSaved: widget.onSaved, // style: Theme.of(context) // .textTheme // .bodyText1 // .copyWith(fontSize: widget.fontSize, fontWeight: widget.fontWeight), // inputFormatters: widget.keyboardType == TextInputType.phone // ? [ // FilteringTextInputFormatter.digitsOnly, // _mobileFormatter, // ] // : widget.inputFormatters, // decoration: InputDecoration( // counterText: "", // hintText: widget.hintText, // hintStyle: TextStyle( // fontSize: widget.fontSize, // fontWeight: widget.fontWeight, // color: widget.hintColor ?? Theme.of(context).hintColor, // ), // contentPadding: widget.padding != null // ? widget.padding // : EdgeInsets.symmetric( // vertical: (widget.bare && !widget.keepPadding) ? 0.0 : 10.0, // horizontal: 16.0), // filled: true, // fillColor: widget.bare // ? Colors.transparent // : Theme.of(context).backgroundColor, // suffixIcon: _buildSuffixIcon(), // prefixIcon: widget.prefixIcon, // errorStyle: TextStyle( // fontSize: 14.0, // fontWeight: widget.fontWeight, // height: widget.borderOnlyError ? 0.0 : null), // errorBorder: OutlineInputBorder( // borderSide: BorderSide( // color: Theme.of(context) // .errorColor // .withOpacity(widget.bare ? 0.0 : 0.5), // width: 1.0), // borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), // focusedErrorBorder: OutlineInputBorder( // borderSide: BorderSide( // color: Theme.of(context) // .errorColor // .withOpacity(widget.bare ? 0.0 : 0.5), // width: 1.0), // borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), // focusedBorder: OutlineInputBorder( // borderSide: BorderSide(color: Colors.grey, width: 1.0), // borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), // disabledBorder: OutlineInputBorder( // borderSide: BorderSide(color: Colors.grey, width: 1.0), // borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0)), // enabledBorder: OutlineInputBorder( // borderSide: BorderSide(color: Colors.grey, width: 1.0), // borderRadius: BorderRadius.circular(widget.bare ? 0.0 : 8.0), // ), // ), // ), // )); // } // }