如何在FormBuilderDateRangePicker中禁用未来日期
FormBuilderDateRangePicker禁用未来日期实现方案
FormBuilderDateTimePicker可通过selectableDayPredicate配置可选日期,但FormBuilderDateRangePicker未提供该参数,你可以通过以下两种方式实现需求:
- 方式一:通过
lastDate参数直接限制可选最大日期
这是最简便的实现方式,设置后所有晚于lastDate的日期会自动置灰不可选,代码示例:
FormBuilderDateRangePicker( name: 'date_range', // 可自行调整允许选择的最早日期 firstDate: DateTime(2020), // 设为当前日期即可禁用所有未来日期 lastDate: DateTime.now(), decoration: const InputDecoration(labelText: '选择日期范围'), )
如果需要允许选择当天的全部时段,可以将lastDate调整为当日的最后一刻:lastDate: DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, 23, 59, 59),
- 方式二:结合
validator做校验兜底
如果有更复杂的可选日期规则(比如除了未来日期还要禁用部分历史日期),可以在校验规则里增加判断,选中不符合规则的日期时会触发错误提示:
FormBuilderDateRangePicker( name: 'date_range', firstDate: DateTime(2020), lastDate: DateTime(2030), decoration: const InputDecoration(labelText: '选择日期范围'), validator: (value) { if (value == null) return '请选择日期范围'; // 判断开始/结束日期是否为未来日期 if (value.start.isAfter(DateTime.now()) || value.end.isAfter(DateTime.now())) { return '不可选择未来日期'; } // 可在此处添加更多自定义校验规则 return null; }, )
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

