maskedFormatter static method

List<TextInputFormatter> maskedFormatter(
  1. String mask, {
  2. String placeholder = '*',
})

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;
}