updateMask method

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

Implementation

String? updateMask({required String value, required TextEditingController controller, required RegExp regexFilter, TextInputType? textInputType}) {
  // Extrair apenas nĂºmeros e letras do value
  final valueClean = _cleanValue(value);

  final nextMask = _formaters.firstWhereOrNull((mask) {
    final maskHashtags = _cleanMask(mask.maskImmutable);
    return maskHashtags.length > _cleanMask(_currentMask.maskImmutable).length;
  });

  final previousMask = _formaters.firstWhereOrNull((mask) {
    final maskHashtags = _cleanMask(mask.maskImmutable);
    return _cleanMask(_currentMask.maskImmutable).length > maskHashtags.length;
  });

  if (nextMask != null) {
    if (valueClean.length > _cleanMask(_currentMask.maskImmutable).length) {
      _currentMask = nextMask;
      final newValue = mask!.updateMask(
        mask: nextMask.mask,
        filter: {"#": textInputType != null && textInputType == TextInputType.number ? RegExp(r'[0-9]') : regexFilter},
      );
      Future.microtask(() => controller.value = newValue);
      return newValue.text;
    }
  }

  if (previousMask != null) {
    final previousMaskHashtags = _cleanMask(previousMask.maskImmutable);
    if (valueClean.length == previousMaskHashtags.length) {
      _currentMask = previousMask;
      final newValue = mask!.updateMask(
        mask: previousMask.mask,
        filter: {"#": textInputType != null && textInputType == TextInputType.number ? RegExp(r'[0-9]') : regexFilter},
      );
      Future.microtask(() => controller.value = newValue);
      return newValue.text;
    }
  }
  return null;
}