import 'package:flutter/services.dart'; class PhoneNumberTextInputFormatter extends TextInputFormatter { final String mask; final String separator; PhoneNumberTextInputFormatter({ required this.mask, required this.separator, }); @override TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) { if (newValue.text.isNotEmpty) { if (newValue.text.length > oldValue.text.length) { if (newValue.text.length > mask.length) return oldValue; if (newValue.text.length < mask.length && mask[newValue.text.length - 1] == separator) { return TextEditingValue( text: '${oldValue.text}$separator${newValue.text.substring(newValue.text.length - 1)}', selection: TextSelection.collapsed( offset: newValue.selection.end + 1, ), ); } } } return newValue; } }