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