another commit
This commit is contained in:
50
lib/widgets/thousandSeparator.dart
Normal file
50
lib/widgets/thousandSeparator.dart
Normal file
@ -0,0 +1,50 @@
|
||||
// ignore_for_file: file_names
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class ThousandsSeparatorInputFormatter extends TextInputFormatter {
|
||||
static const separator = ','; // Change this to '.' for other locales
|
||||
|
||||
@override
|
||||
TextEditingValue formatEditUpdate(
|
||||
TextEditingValue oldValue, TextEditingValue newValue) {
|
||||
// Short-circuit if the new value is empty
|
||||
if (newValue.text.isEmpty) {
|
||||
return newValue.copyWith(text: '');
|
||||
}
|
||||
|
||||
// Handle "deletion" of separator character
|
||||
String oldValueText = oldValue.text.replaceAll(separator, '');
|
||||
String newValueText = newValue.text.replaceAll(separator, '');
|
||||
|
||||
if (oldValue.text.endsWith(separator) &&
|
||||
oldValue.text.length == newValue.text.length + 1) {
|
||||
newValueText = newValueText.substring(0, newValueText.length - 1);
|
||||
}
|
||||
|
||||
// Only process if the old value and new value are different
|
||||
if (oldValueText != newValueText) {
|
||||
int selectionIndex =
|
||||
newValue.text.length - newValue.selection.extentOffset;
|
||||
final chars = newValueText.split('');
|
||||
|
||||
String newString = '';
|
||||
for (int i = chars.length - 1; i >= 0; i--) {
|
||||
if ((chars.length - 1 - i) % 3 == 0 && i != chars.length - 1) {
|
||||
newString = separator + newString;
|
||||
}
|
||||
newString = chars[i] + newString;
|
||||
}
|
||||
|
||||
return TextEditingValue(
|
||||
text: newString.toString(),
|
||||
selection: TextSelection.collapsed(
|
||||
offset: newString.length - selectionIndex,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// If the new value and old value are the same, just return as-is
|
||||
return newValue;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user