From 9a356cf5a1d027e6ca97b30d799b0052da202c54 Mon Sep 17 00:00:00 2001 From: Giao Ho Date: Fri, 28 Apr 2023 19:34:41 +0700 Subject: [PATCH] Fix group of negative number. --- CHANGELOG.md | 4 ++ lib/src/filter.dart | 9 +++- pubspec.yaml | 2 +- test/number_text_input_formatter_test.dart | 50 ++++++++++++++++++++++ 4 files changed, 63 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9e7b06..dfe71ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.0+5 + +- Fix group of negative numbers. + ## 1.0.0+4 - Allow disable fix number. diff --git a/lib/src/filter.dart b/lib/src/filter.dart index 6c99a45..9ef9d38 100644 --- a/lib/src/filter.dart +++ b/lib/src/filter.dart @@ -34,6 +34,7 @@ class TextNumberFilter { bool limitedNumber = false; bool limitedInteger = false; bool? limitedDecimal; + bool isNegative = false; bool numberStarted = false; bool hasNumber = false; bool foundNumbers = false; @@ -81,6 +82,7 @@ class TextNumberFilter { bool filterNext(int value, int index, LookupTextValueEditor state) { bool allow = false; if (!numberStarted && options.allowNegative && value == _negative) { + isNegative = true; allow = true; } else if (decimalPoint == null) { if (_number_0 <= value && value <= _number_9) { @@ -315,9 +317,14 @@ class TextNumberFilter { void groupDigits() { if (options.groupDigits != null) { var index = integerDigits; + var startPoint = 0; + if (isNegative) { + index += 1; + startPoint = 1; + } while (true) { index -= options.groupDigits!; - if (index < 1) { + if (index <= startPoint) { break; } editor.insert(index, groupSeparator); diff --git a/pubspec.yaml b/pubspec.yaml index 9084402..81b4a2c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: number_text_input_formatter description: Number Text Input Formatter for Flutter -version: 1.0.0+4 +version: 1.0.0+5 homepage: https://github.com/joutvhu/number_text_input_formatter repository: https://github.com/joutvhu/number_text_input_formatter.git diff --git a/test/number_text_input_formatter_test.dart b/test/number_text_input_formatter_test.dart index 0202116..dd7a22e 100644 --- a/test/number_text_input_formatter_test.dart +++ b/test/number_text_input_formatter_test.dart @@ -410,6 +410,56 @@ void main() { expect(result.text, '-2454.41'); }); + test('allow_negative_4', () { + var result = NumberTextInputFormatter( + integerDigits: 13, + decimalDigits: 2, + groupDigits: 3, + allowNegative: true, + ).formatEditUpdate( + const TextEditingValue( + text: '', + ), + const TextEditingValue( + text: '-245.41', + ), + ); + expect(result.text, '-245.41'); + }); + + test('allow_negative_5', () { + var result = NumberTextInputFormatter( + integerDigits: 13, + decimalDigits: 2, + groupDigits: 3, + allowNegative: true, + ).formatEditUpdate( + const TextEditingValue( + text: '', + ), + const TextEditingValue( + text: '-2405.41', + ), + ); + expect(result.text, '-2,405.41'); + }); + + test('allow_negative_6', () { + var result = NumberTextInputFormatter( + integerDigits: 13, + decimalDigits: 2, + allowNegative: true, + ).formatEditUpdate( + const TextEditingValue( + text: '', + ), + const TextEditingValue( + text: '--245.41', + ), + ); + expect(result.text, '-245.41'); + }); + test('insert_decimal_point_1', () { var result = NumberTextInputFormatter( integerDigits: 13,