Skip to content

Commit fd4d68a

Browse files
authored
Merge pull request #4 from joutvhu/develop
Allow disable fix number.
2 parents 283d715 + 109dfd6 commit fd4d68a

File tree

5 files changed

+88
-27
lines changed

5 files changed

+88
-27
lines changed

CHANGELOG.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
1-
## 1.0.0
1+
## 1.0.0+4
22

3-
- Initial library
4-
- Support NumberTextInputFormatter, CurrencyTextInputFormatter and PercentageTextInputFormatter.
3+
- Allow disable fix number.
54

6-
## 1.0.0+1
5+
## 1.0.0+3
76

8-
- Check isNotEmpty before insert prefix or suffix.
7+
- Fix maxDecimal issue.
98

109
## 1.0.0+2
1110

1211
- Fix maxValue issue.
1312

13+
## 1.0.0+1
1414

15-
## 1.0.0+3
15+
- Check isNotEmpty before insert prefix or suffix.
1616

17-
- Fix maxDecimal issue.
17+
## 1.0.0
18+
19+
- Initial library
20+
- Support NumberTextInputFormatter, CurrencyTextInputFormatter and PercentageTextInputFormatter.

lib/src/filter.dart

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ class TextNumberFilter {
7575

7676
TextValueEditor filter() {
7777
editor.forEach(filterNext, filterComplete);
78-
afterFilter();
7978
return editor;
8079
}
8180

@@ -118,9 +117,20 @@ class TextNumberFilter {
118117
state.remove(startPosition, length);
119118
}
120119

121-
if (hasNumber && integerDigits == 0) {
122-
integerDigits = 1;
123-
state.prefix('0');
120+
insertIntegerDigits();
121+
122+
if (editor.isNotEmpty) {
123+
if (decimalPoint != null) {
124+
if (decimalDigits == 0) {
125+
insertDecimalDigits();
126+
}
127+
} else {
128+
if (hasDecimalPoint) {
129+
insertDecimalPoint();
130+
}
131+
}
132+
133+
groupDigits();
124134
}
125135
}
126136

@@ -174,8 +184,10 @@ class TextNumberFilter {
174184
if (!allowing && startPosition < state.index) {
175185
state.remove(startPosition, state.index);
176186
}
177-
state.prefix('0');
178-
integerDigits = 1;
187+
if (options.fixNumber) {
188+
state.prefix('0');
189+
integerDigits = 1;
190+
}
179191
allowing = true;
180192
startPosition = state.index;
181193
}
@@ -254,25 +266,18 @@ class TextNumberFilter {
254266
return allow;
255267
}
256268

257-
void afterFilter() {
258-
if (editor.isNotEmpty) {
259-
if (decimalPoint != null) {
260-
if (decimalDigits == 0) {
261-
insertDecimalDigits();
262-
}
263-
} else {
264-
if (hasDecimalPoint) {
265-
insertDecimalPoint();
266-
}
269+
void insertIntegerDigits() {
270+
if ((decimalPoint != null || hasNumber) && integerDigits == 0) {
271+
if (!removing && options.fixNumber) {
272+
integerDigits = 1;
273+
editor.prefix('0');
267274
}
268-
269-
groupDigits();
270275
}
271276
}
272277

273278
void insertDecimalDigits() {
274279
decimalPoint ??= editor.length - 1;
275-
if (!removing) {
280+
if (!removing && (options.fixNumber || options.insertDecimalDigits)) {
276281
decimalDigits = options.decimalDigits ?? 1;
277282
editor.suffix('0' * decimalDigits);
278283
}

lib/src/formatter.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ class NumberTextInputFormatter extends TextInputFormatter {
3131
/// Allow input of negative numbers?
3232
final bool allowNegative;
3333

34+
/// Insert 0 before the decimal point if the number starts with a decimal point
35+
/// Insert 0 after the decimal point if the number ends with a decimal point
36+
final bool fixNumber;
37+
3438
/// Automatically insert decimal point.
3539
final bool insertDecimalPoint;
3640

@@ -57,6 +61,7 @@ class NumberTextInputFormatter extends TextInputFormatter {
5761
this.groupSeparator = ',',
5862
this.allowNegative = false,
5963
this.overrideDecimalPoint = false,
64+
this.fixNumber = true,
6065
this.insertDecimalPoint = false,
6166
this.insertDecimalDigits = false,
6267
}) : assert(integerDigits == null || integerDigits > 0),

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+3
3+
version: 1.0.0+4
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: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,22 @@ void main() {
755755
expect(result.text, '804583.60');
756756
});
757757

758+
test('override_decimal_point_10', () {
759+
var result = NumberTextInputFormatter(
760+
integerDigits: 2,
761+
decimalDigits: 2,
762+
insertDecimalPoint: true,
763+
).formatEditUpdate(
764+
const TextEditingValue(
765+
text: '',
766+
),
767+
const TextEditingValue(
768+
text: '58',
769+
),
770+
);
771+
expect(result.text, '0.58');
772+
});
773+
758774
test('filter_other_decimal_point_1', () {
759775
var result = NumberTextInputFormatter(
760776
integerDigits: 13,
@@ -787,6 +803,38 @@ void main() {
787803
expect(result.text, '3.66');
788804
});
789805

806+
test('filter_fix_number_1', () {
807+
var result = NumberTextInputFormatter(
808+
integerDigits: 12,
809+
groupDigits: 3,
810+
fixNumber: false
811+
).formatEditUpdate(
812+
const TextEditingValue(
813+
text: '11',
814+
),
815+
const TextEditingValue(
816+
text: '11.',
817+
),
818+
);
819+
expect(result.text, '11.');
820+
});
821+
822+
test('filter_fix_number_2', () {
823+
var result = NumberTextInputFormatter(
824+
integerDigits: 12,
825+
groupDigits: 3,
826+
fixNumber: false
827+
).formatEditUpdate(
828+
const TextEditingValue(
829+
text: '11',
830+
),
831+
const TextEditingValue(
832+
text: '.11',
833+
),
834+
);
835+
expect(result.text, '.11');
836+
});
837+
790838
test('currency_text_input_formatter_1', () {
791839
var result = CurrencyTextInputFormatter(
792840
prefix: '\$'

0 commit comments

Comments
 (0)