updateMask method

void updateMask({
  1. required String value,
  2. required TextEditingController controller,
  3. required RegExp regexFilter,
  4. TextInputType? textInputType,
})

Implementation

void updateMask({required String value, required TextEditingController controller, required RegExp regexFilter, TextInputType? textInputType}) {
  final List<int> lenghts = _formaters.map((e) => e.length).toList();
  if (lenghts.any((e) => value.length < e) == false) return;

  final updatedMask = _formaters.firstWhere((mask) => mask.length > value.length, orElse: () => '');

  if (value.length - 1 == _formaters.first.length && _currentMask != _formaters.first) {
    _currentMask = _formaters.first;
    controller.value = mask!.updateMask(
      mask: _formaters.first,
      filter: {
        "#": textInputType != null && textInputType == TextInputType.number ? RegExp(r'[0-9]') : regexFilter
      },
    );

    return;
  }

  if (updatedMask.isEmpty || updatedMask == _currentMask) return;

  if (value.length < updatedMask.length) {
    _currentMask = updatedMask;
    controller.value = mask!.updateMask(
      mask: updatedMask,
      filter: {
        "#": textInputType != null && textInputType == TextInputType.number ? RegExp(r'[0-9]') : regexFilter
      },
    );
    return;
  }
}