You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中基于form_field_validator实现必填与自定义日期验证器

实现并调用自定义DateValidator步骤

1. 编写DateValidator类

继承TextFieldValidator,根据业务需求实现日期验证逻辑。以下提供两种常见场景的实现:

场景1:验证日期有效性+不晚于指定日期

class DateValidator extends TextFieldValidator {
  final DateTime maxDate;

  DateValidator({required String errorText, required this.maxDate}) : super(errorText);

  // 空值时跳过该验证(必填逻辑已由RequiredValidator处理)
  @override
  bool get ignoreEmptyValues => true;

  @override
  bool isValid(String? value) {
    if (value == null || value.isEmpty) return true;

    // 尝试将输入字符串转为DateTime
    DateTime? inputDate = DateTime.tryParse(value);
    if (inputDate == null) return false;

    // 验证输入日期不晚于指定的maxDate
    return inputDate.isBefore(maxDate) || inputDate.isAtSameMomentAs(maxDate);
  }

  @override
  String? call(String? value) {
    return isValid(value) ? null : errorText;
  }
}

场景2:验证日期格式(如yyyy-MM-dd)

class DateValidator extends TextFieldValidator {
  DateValidator({required String errorText}) : super(errorText);

  @override
  bool get ignoreEmptyValues => true;

  @override
  bool isValid(String? value) {
    if (value == null || value.isEmpty) return true;
    // 匹配yyyy-MM-dd格式的正则
    RegExp dateRegex = RegExp(r'^\d{4}-\d{2}-\d{2}$');
    if (!dateRegex.hasMatch(value)) return false;
    // 二次验证是否为合法日期(排除2月30日这类无效日期)
    return DateTime.tryParse(value) != null;
  }

  @override
  String? call(String? value) {
    return isValid(value) ? null : errorText;
  }
}

2. 在表单中调用DateValidator

直接在目标字段的validator列表中添加DateValidator实例,传入对应参数即可:

Theme(
  data: ThemeData(primarySwatch: Colors.red),
  child: GenericDateTimePickerBanorteWidget(
    controller: fechaDiagnosticoController,
    validator: [
      RequiredValidator(errorText: "Campo obligatorio"),
      // 示例:验证日期不晚于当前日期,错误提示自定义
      DateValidator(
        errorText: "Fecha no puede ser futura",
        date: DateTime.now()
      )
    ],
  ),
),

关键细节说明

  • ignoreEmptyValues设为true:避免和RequiredValidator的必填验证重复触发报错,空值仅由必填验证处理。
  • 验证逻辑可灵活修改:根据实际业务需求调整isValid方法,比如验证日期是否早于指定日期、是否在某个时间区间内等。

内容的提问来源于stack exchange,提问作者Michael Adolfo Huerta Ramirez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:02:10