import 'package:flutter/services.dart';
class ConfirmationIdFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue,
) {
// Extract only digits from the input
String digitsOnly = newValue.text.replaceAll(RegExp(r'[^\d]'), '');
// Limit to 10 digits maximum
if (digitsOnly.length > 9) {
digitsOnly = digitsOnly.substring(0, 9);
}
// Build the formatted string: add dash after 9 digits
String formatted = '';
if (digitsOnly.length > 8) {
formatted = '${digitsOnly.substring(0, 8)}-${digitsOnly.substring(8)}';
} else if (digitsOnly.length == 8) {
formatted = '$digitsOnly-';
} else {
formatted = digitsOnly;
}
// Calculate cursor position
int cursorPosition = formatted.length;
if (newValue.text.length < oldValue.text.length) {
// When deleting, maintain cursor position relative to digits
cursorPosition = formatted.length;
} else {
// When adding, place cursor after the last digit
if (digitsOnly.length == 8) {
cursorPosition = formatted.length; // After the dash
} else if (digitsOnly.length > 8) {
cursorPosition = formatted.length; // After the last digit
} else {
cursorPosition = digitsOnly.length;
}
}
return TextEditingValue(
text: formatted,
selection: TextSelection.collapsed(offset: cursorPosition),
);
}
}