Skip to content

Commit 283d715

Browse files
authored
Merge pull request #2 from joutvhu/develop
Fix maxDecimal issue.
2 parents 44864c1 + 6b536f1 commit 283d715

File tree

4 files changed

+99
-11
lines changed

4 files changed

+99
-11
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,8 @@
1010
## 1.0.0+2
1111

1212
- Fix maxValue issue.
13+
14+
15+
## 1.0.0+3
16+
17+
- Fix maxDecimal issue.

lib/src/filter.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class TextNumberFilter {
3333
int decimalDigits = 0;
3434
bool limitedNumber = false;
3535
bool limitedInteger = false;
36-
bool limitedDecimal = false;
36+
bool? limitedDecimal;
3737
bool numberStarted = false;
3838
bool hasNumber = false;
3939
bool foundNumbers = false;
@@ -65,7 +65,7 @@ class TextNumberFilter {
6565
decimalDigits = 0;
6666
limitedNumber = false;
6767
limitedInteger = false;
68-
limitedDecimal = false;
68+
limitedDecimal = null;
6969
numberStarted = false;
7070
hasNumber = false;
7171
foundNumbers = false;
@@ -188,9 +188,11 @@ class TextNumberFilter {
188188
bool filterDecimal(int value, int index, LookupTextValueEditor state) {
189189
var allow = false;
190190
if (maxDecimalDigits == null || decimalDigits < maxDecimalDigits!) {
191-
if (maxDecimalDigits == null || value == _number_0) {
191+
if (maxDecimalDigits == null) {
192192
allow = true;
193-
} else if (limitedDecimal) {
193+
} else if (limitedDecimal == false) {
194+
allow = true;
195+
} else if (limitedDecimal == true) {
194196
allow = false;
195197
} else if (limitedNumber && options.maxDecimal != null && options.maxDecimal!.length == maxDecimalDigits) {
196198
allow = filterMaximumDecimal(value, state.index, state);
@@ -209,6 +211,7 @@ class TextNumberFilter {
209211
var char = codes[state.index - decimalPoint! - 1];
210212
if (value < char) {
211213
limitedNumber = false;
214+
limitedDecimal = false;
212215
return true;
213216
} else if (value > char) {
214217
limitedDecimal = true;

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: number_text_input_formatter
22
description: Number Text Input Formatter for Flutter
3-
version: 1.0.0+2
3+
version: 1.0.0+3
44

55
homepage: https://github.com/joutvhu/number_text_input_formatter
66
repository: https://github.com/joutvhu/number_text_input_formatter.git

test/number_text_input_formatter_test.dart

Lines changed: 86 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ void main() {
9797
selection: TextSelection.collapsed(offset: 4),
9898
),
9999
);
100-
expect(result.text, '1.00');
100+
expect(result.text, '1.05');
101101
});
102102

103103
test('overflow_decimal_part_2', () {
@@ -115,7 +115,7 @@ void main() {
115115
selection: TextSelection.collapsed(offset: 5),
116116
),
117117
);
118-
expect(result.text, '1.00');
118+
expect(result.text, '1.05');
119119
});
120120

121121
test('integer_part_greater_than_max_value_1', () {
@@ -154,7 +154,7 @@ void main() {
154154
expect(result.text, '0');
155155
});
156156

157-
test('integer_part_greater_than_maxValue_3', () {
157+
test('integer_part_greater_than_max_value_3', () {
158158
var result = NumberTextInputFormatter(
159159
integerDigits: 2,
160160
decimalDigits: 2,
@@ -172,7 +172,7 @@ void main() {
172172
expect(result.text, '1');
173173
});
174174

175-
test('integer_part_greater_than_maxValue_4', () {
175+
test('integer_part_greater_than_max_value_4', () {
176176
var result = NumberTextInputFormatter(
177177
integerDigits: 2,
178178
decimalDigits: 2,
@@ -190,7 +190,7 @@ void main() {
190190
expect(result.text, '1');
191191
});
192192

193-
test('integer_part_greater_than_maxValue_5', () {
193+
test('integer_part_greater_than_max_value_5', () {
194194
var result = NumberTextInputFormatter(
195195
integerDigits: 3,
196196
decimalDigits: 2,
@@ -208,7 +208,7 @@ void main() {
208208
expect(result.text, '10');
209209
});
210210

211-
test('integer_part_greater_than_maxValue_6', () {
211+
test('integer_part_greater_than_max_value_6', () {
212212
var result = NumberTextInputFormatter(
213213
maxValue: '100.09',
214214
).formatEditUpdate(
@@ -296,6 +296,54 @@ void main() {
296296
expect(result.text, '1.4');
297297
});
298298

299+
test('decimal_part_greater_than_max_value_5', () {
300+
var result = NumberTextInputFormatter(
301+
integerDigits: 2,
302+
decimalDigits: 2,
303+
maxValue: '1.33'
304+
).formatEditUpdate(
305+
const TextEditingValue(
306+
text: '',
307+
),
308+
const TextEditingValue(
309+
text: '1.41',
310+
),
311+
);
312+
expect(result.text, '1.00');
313+
});
314+
315+
test('decimal_part_less_than_max_value_1', () {
316+
var result = NumberTextInputFormatter(
317+
integerDigits: 1,
318+
decimalDigits: 2,
319+
maxValue: '1.33',
320+
).formatEditUpdate(
321+
const TextEditingValue(
322+
text: '',
323+
),
324+
const TextEditingValue(
325+
text: '1.09',
326+
),
327+
);
328+
expect(result.text, '1.09');
329+
});
330+
331+
test('decimal_part_less_than_max_value_2', () {
332+
var result = NumberTextInputFormatter(
333+
integerDigits: 1,
334+
decimalDigits: 2,
335+
maxValue: '1.33',
336+
).formatEditUpdate(
337+
const TextEditingValue(
338+
text: '',
339+
),
340+
const TextEditingValue(
341+
text: '1.19',
342+
),
343+
);
344+
expect(result.text, '1.19');
345+
});
346+
299347
test('change_decimal_separator_1', () {
300348
var result = NumberTextInputFormatter(
301349
integerDigits: 13,
@@ -707,6 +755,38 @@ void main() {
707755
expect(result.text, '804583.60');
708756
});
709757

758+
test('filter_other_decimal_point_1', () {
759+
var result = NumberTextInputFormatter(
760+
integerDigits: 13,
761+
decimalDigits: 2,
762+
overrideDecimalPoint: true,
763+
).formatEditUpdate(
764+
const TextEditingValue(
765+
text: '',
766+
),
767+
const TextEditingValue(
768+
text: '1.3a.66',
769+
),
770+
);
771+
expect(result.text, '13.66');
772+
});
773+
774+
test('filter_other_decimal_point_2', () {
775+
var result = NumberTextInputFormatter(
776+
integerDigits: 13,
777+
decimalDigits: 2,
778+
overrideDecimalPoint: true,
779+
).formatEditUpdate(
780+
const TextEditingValue(
781+
text: '',
782+
),
783+
const TextEditingValue(
784+
text: '0.3.66',
785+
),
786+
);
787+
expect(result.text, '3.66');
788+
});
789+
710790
test('currency_text_input_formatter_1', () {
711791
var result = CurrencyTextInputFormatter(
712792
prefix: '\$'

0 commit comments

Comments
 (0)