@@ -2,28 +2,32 @@ import 'package:flutter/material.dart';
22import 'package:flutter/services.dart' ;
33
44class 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