maskedFormatter static method
maskedFormatter applies a mask to the input. Example mask: "--***" where '' is a placeholder for user input.
Implementation
static List<TextInputFormatter> maskedFormatter(String mask,
{String placeholder = '*'}) {
final List<TextInputFormatter> formatters = [];
String formattedMask = '';
int placeholderCount = 0; // Count of placeholder characters
for (int i = 0; i < mask.length; i++) {
final String char = mask[i];
if (char == placeholder) {
placeholderCount++;
formattedMask += char;
} else {
formattedMask += char;
}
}
formatters.add(FilteringTextInputFormatter.allow(RegExp('[a-zA-Z0-9]')));
formatters.add(TextInputFormatter.withFunction((oldValue, newValue) {
String newText = newValue.text.replaceAll(RegExp(r'[^a-zA-Z0-9]'), '');
if (newText.length > placeholderCount) {
newText = newText.substring(0, placeholderCount);
}
final StringBuffer buffer = StringBuffer();
int textIndex = 0;
for (int i = 0; i < formattedMask.length; i++) {
if (formattedMask[i] == placeholder) {
if (textIndex < newText.length) {
buffer.write(newText[textIndex]);
textIndex++;
} else {
break;
}
} else {
buffer.write(formattedMask[i]);
}
}
final String formattedText = buffer.toString();
return TextEditingValue(
text: formattedText,
selection: TextSelection.collapsed(offset: formattedText.length),
);
}));
return formatters;
}