17 days later, but I could implement this:
class CardExpirationFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
final newValueString = newValue.text;
String valueToReturn = '';
for (int i = 0; i < newValueString.length; i++) {
if (newValueString[i] != '/') valueToReturn += newValueString[i];
var nonZeroIndex = i + 1;
final contains = valueToReturn.contains(RegExp(r'\/'));
if (nonZeroIndex % 2 == 0 &&
nonZeroIndex != newValueString.length &&
!(contains)) {
valueToReturn += '/';
}
}
return newValue.copyWith(
text: valueToReturn,
selection: TextSelection.fromPosition(
TextPosition(offset: valueToReturn.length),
),
);
}
}