出生日期字段的MM/dd/yyyy
格式日期,当用户输入2 digit
时,会自动添加'/'
应进行验证,以确保月份在01到12之间,日期在01到31之间。
月份为空,日期空,年份验证为空
-
第一个文本字段
TextFormField( keyboardType: TextInputType.phone, controller: birthDateInputController, validator: Utils.birthDateValidator, inputFormatters: [ LengthLimitingTextInputFormatter(10), FilteringTextInputFormatter.singleLineFormatter, birthDateInput, ], ),
-
输入号验证Utils.birthDateValidator
static String birthDateValidator(String value) { final DateTime now = DateTime.now(); final DateFormat formatter = DateFormat('yyyy'); final String formatted = formatter.format(now); String str1 = value; List<String> str2 = str1.split('/'); String month = str2.isNotEmpty ? str2[0] : ''; String day = str2.length > 1 ? str2[1] : ''; String year = str2.length > 2 ? str2[2] : ''; if (value.isEmpty) { return 'BirthDate is Empty'; } else if (int.parse(month) > 13) { return 'Month is invalid'; } else if (int.parse(day) > 32) { return 'Day is invalid'; } else if ((int.parse(year) > int.parse(formatted))) { return 'Year is invalid'; } else if((int.parse(year) < 1920)){ return 'Year is invalid'; } return null;
}
-
在两位数字后自动添加"/">出生日期输入
class BirthTextInputFormatter extends TextInputFormatter { @override TextEditingValue formatEditUpdate( TextEditingValue oldValue, TextEditingValue newValue) { if (oldValue.text.length >= newValue.text.length) { return newValue; } var dateText = _addSeparator(newValue.text, '/'); return newValue.copyWith( text: dateText, selection: updateCursorPosition(dateText)); } String _addSeparator(String value, String separator) { value = value.replaceAll('/', ''); var newString = ''; for (int i = 0; i < value.length; i++) { newString += value[i]; if (i == 1) { newString += separator; } if (i == 3) { newString += separator; } } return newString; } TextSelection updateCursorPosition(String text) { return TextSelection.fromPosition(TextPosition(offset: text.length)); } }