Skip to content

Commit 8f2e5ed

Browse files
committed
Improved month input formatter
1 parent ad9377e commit 8f2e5ed

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

lib/src/widgets/common/input_formatters.dart

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,32 @@ import 'package:flutter/material.dart';
22
import 'package:flutter/services.dart';
33

44
class CardMonthInputFormatter extends TextInputFormatter {
5+
String previousText;
56
@override
67
TextEditingValue formatEditUpdate(
78
TextEditingValue oldValue, TextEditingValue newValue) {
8-
var newText = newValue.text;
9+
var text = newValue.text;
910

1011
if (newValue.selection.baseOffset == 0) {
1112
return newValue;
1213
}
1314

1415
var buffer = new StringBuffer();
15-
for (int i = 0; i < newText.length; i++) {
16-
buffer.write(newText[i]);
16+
for (int i = 0; i < text.length; i++) {
17+
buffer.write(text[i]);
1718
var nonZeroIndex = i + 1;
18-
if (nonZeroIndex % 2 == 0 && nonZeroIndex != newText.length) {
19+
20+
if (nonZeroIndex % 2 == 0 &&
21+
((!_isDeletion(previousText, text) && nonZeroIndex != 4) ||
22+
(nonZeroIndex != text.length))) {
1923
buffer.write('/');
2024
}
2125
}
2226

27+
previousText = text;
2328
var string = buffer.toString();
2429
return newValue.copyWith(
25-
text: string,
26-
selection: new TextSelection.collapsed(offset: string.length));
30+
text: string, selection: new TextSelection.collapsed(offset: string.length));
2731
}
2832
}
2933

@@ -52,3 +56,11 @@ class CardNumberInputFormatter extends TextInputFormatter {
5256
selection: new TextSelection.collapsed(offset: string.length));
5357
}
5458
}
59+
60+
bool _isDeletion(String prevText, String newText) {
61+
if (prevText == null) {
62+
return false;
63+
}
64+
65+
return prevText.length > newText.length;
66+
}

0 commit comments

Comments
 (0)