import 'package:flutter/services.dart'; class CardNumberFormatter extends TextInputFormatter { @override TextEditingValue formatEditUpdate( TextEditingValue oldValue, TextEditingValue newValue, ) { var text = newValue.text.replaceAll(' ', ''); var buffer = StringBuffer(); for (int i = 0; i < text.length; i++) { buffer.write(text[i]); var nonZeroIndex = i + 1; if (nonZeroIndex % 4 == 0 && nonZeroIndex != text.length) { buffer.write(' '); // Добавляем пробел каждые 4 цифры } } var string = buffer.toString(); return newValue.copyWith( text: string, selection: TextSelection.collapsed(offset: string.length), ); } } class CardMonthInputFormatter extends TextInputFormatter { @override TextEditingValue formatEditUpdate( TextEditingValue oldValue, TextEditingValue newValue, ) { var newText = newValue.text; if (newValue.selection.baseOffset == 0) return newValue; var buffer = StringBuffer(); for (int i = 0; i < newText.length; i++) { buffer.write(newText[i]); var nonZeroIndex = i + 1; if (nonZeroIndex % 2 == 0 && nonZeroIndex != newText.length) { buffer.write('/'); // Добавляем слэш после 2-й цифры } } var string = buffer.toString(); return newValue.copyWith( text: string, selection: TextSelection.collapsed(offset: string.length), ); } }