Flutter FormBuilderDateTimePicker手动输入12时后小时触发时间验证错误
Flutter FormBuilderDateTimePicker 12点后手动输入时间校验错误问题
问题表现
- 基于
flutter_form_builder库使用FormBuilderDateTimePicker组件时,通过键盘手动输入时间(不使用图形化拖拽选择器),只要小时值落在12:00-24:00区间就会触发验证错误 - 典型复现场景:输入12:30可正常通过校验,将小时修改为16:30时立刻弹出验证错误提示
- 问题场景截图:


复现配置
使用如下组件配置即可复现问题,同组件的图形选择输入模式可正常工作,预期两种输入模式均支持24小时制时间输入:
FormBuilderDateTimePicker( name: 'fieldname', initialValue: DateTime.now(), initialDate: DateTime.now(), initialEntryMode: DatePickerEntryMode.input, alwaysUse24HourFormat: true, onChanged: (value) => myValue = value, format: DateFormat.yMMMMd('it_IT').add_Hm(), timePickerInitialEntryMode: TimePickerEntryMode.input, )
正常运行效果参考:
解决方案
这个问题是组件旧版本的已知bug:手动输入模式下alwaysUse24HourFormat: true配置没有正确透传给底层时间输入校验逻辑,底层默认按12小时制校验小时范围(仅允许1-12的数值),导致13-23的小时值被判定为非法。
- 优先方案:直接将
flutter_form_builder升级到最新稳定版本,该参数透传问题已经在后续迭代中修复,升级后原有配置无需调整即可正常支持24小时制手动输入 - 临时兼容方案:如果受项目依赖限制无法升级,可以手动覆盖组件内置校验逻辑,绕过错误的默认校验:
FormBuilderDateTimePicker( name: 'fieldname', initialValue: DateTime.now(), initialDate: DateTime.now(), initialEntryMode: DatePickerEntryMode.input, alwaysUse24HourFormat: true, format: DateFormat.yMMMMd('it_IT').add_Hm(), timePickerInitialEntryMode: TimePickerEntryMode.input, // 自定义校验覆盖默认错误逻辑 validator: (val) { if (val == null) return '请选择有效时间'; return null; }, onChanged: (value) => myValue = value, )
- 额外检查:确保MaterialApp的本地化代理中已经添加
FormBuilderLocalizations.delegate,避免多语言环境下时间格式解析冲突。
内容的提问来源于stack exchange,提问作者Kostyuk Rostyslav
相关产品推荐
相关产品推荐

