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

Flutter FormBuilderDateTimePicker手动输入12时后小时触发时间验证错误

Flutter FormBuilderDateTimePicker 12点后手动输入时间校验错误问题

问题表现

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

复现配置

使用如下组件配置即可复现问题,同组件的图形选择输入模式可正常工作,预期两种输入模式均支持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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:42:12