出生日期字段采用 MM/dd/yyyy 格式的日期,并自动添加带有颤振验证的'/'



出生日期字段的MM/dd/yyyy格式日期,当用户输入2 digit时,会自动添加'/'

应进行验证,以确保月份在01到12之间,日期在01到31之间。

月份为空,日期空,年份验证为空

  1. 第一个文本字段

    TextFormField(
    keyboardType: TextInputType.phone,
    controller: birthDateInputController,
    validator: Utils.birthDateValidator,
    inputFormatters: [
    LengthLimitingTextInputFormatter(10),
    FilteringTextInputFormatter.singleLineFormatter,
    birthDateInput,
    ],
    ),
    
  2. 输入号验证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;
    

    }

  3. 在两位数字后自动添加"/">出生日期输入

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));
}
}

最新更新