diff --git a/packages/core/lib/utils/text_input_formatter/separator_input_formatter.dart b/packages/core/lib/utils/text_input_formatter/separator_input_formatter.dart new file mode 100644 index 0000000..6a86cc3 --- /dev/null +++ b/packages/core/lib/utils/text_input_formatter/separator_input_formatter.dart @@ -0,0 +1,33 @@ +import 'package:flutter/services.dart'; +import 'package:intl/intl.dart'; + + +/// A text input formatter that formats numbers with a separator. +/// Example: +/// ```dart +/// SeparatorInputFormatter() +/// ``` +class SeparatorInputFormatter extends TextInputFormatter { + final NumberFormat _formatter; + + SeparatorInputFormatter() : _formatter = NumberFormat('#,###'); + + @override + TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) { + if (newValue.text.isEmpty) { + return newValue; + } + String tmpText = newValue.text; + String cleanedText = tmpText.replaceAll(RegExp(r'\D'), ''); + int? number = int.tryParse(cleanedText); + if (number == null) { + return oldValue; + } + String formattedText = _formatter.format(number); + int selectionIndex = formattedText.length; + return TextEditingValue( + text: formattedText, + selection: TextSelection.collapsed(offset: selectionIndex), + ); + } +}