applyMask method

FormattedValue applyMask(
  1. String text
)

Implementation

FormattedValue applyMask(String text) {
  _prepareMask();
  String clearedValueAfter = _removeSeparators(text);
  final isErasing = _maskedValue.length > text.length;
  FormattedValue formattedValue = FormattedValue();
  StringBuffer stringBuffer = StringBuffer();
  var index = 0;
  final splitMask = mask.split('');
  final placeholder = List.filled(
    splitMask.length,
    '',
    growable: false,
  );
  var lastRealCharIndex = 0;
  for (var i = 0; i < splitMask.length; i++) {
    final separator = _getSeparatorForIndex(i);
    if (separator == null) {
      if (clearedValueAfter.length > index) {
        final maskOnDigitMatcher = splitMask[i] == _onlyDigitMask;
        var curChar = clearedValueAfter[index];
        if (maskOnDigitMatcher) {
          if (!isDigit(curChar, positiveOnly: true)) {
            break;
          }
        } else {
          if (!_isMatchingRestrictor(curChar)) {
            break;
          }
        }
        placeholder[i] = curChar;
        lastRealCharIndex = i + 1;
        index++;
      } else {
        break;
      }
    } else {
      placeholder[i] = separator.value;
    }
  }
  for (var i = 0; i < lastRealCharIndex; i++) {
    stringBuffer.write(placeholder[i]);
  }
  formattedValue._isErasing = isErasing;
  formattedValue._formattedValue = stringBuffer.toString();

  return formattedValue;
}