升级date_range_form_field后DateRangeField的onSaved未触发问题咨询
问题原因及版本差异说明
date_range_form_field从^0.0.5升级到^1.0.2属于跨大版本更新,存在多处不兼容变更,你遇到的onSaved不触发是版本变更导致的常见问题,核心差异点如下:
- 移除了旧版本要求必传的
context参数,你代码中注释掉该行的操作是正确的 onSaved回调触发逻辑调整:0.0.5版本中,父级Form组件调用save()方法时,会自动触发DateRangeField的onSaved回调;1.0.x版本中该组件未适配Form的全局save逻辑,只有用户在日期选择弹窗中点击「保存」按钮时才会触发onSaved,且部分1.0小版本存在触发失效的bug- 回调参数类型变更:0.0.5版本
onSaved返回的是List<DateTime>类型(包含开始、结束两个日期的数组),1.0.0之后返回的是DateTimeRange类型对象,如果你后续Bloc事件接收的参数还是List类型,即使回调触发也会出现类型报错
解决方案
你可以根据业务需求选择以下任意一种方案修复:
- 改用
onChanged回调替代onSaved:只要用户选中日期就会实时触发回调,将值同步给Bloc,不需要等表单提交时统一保存,修改成本最低。如果Bloc事件需要接收List类型的日期参数,可以用[datesGarantie.start, datesGarantie.end]转换后再传递 - 手动触发save:给DateRangeField绑定
GlobalKey<FormFieldState<DateTimeRange>>类型的全局key,在表单提交逻辑中先调用key.currentState?.save()手动触发onSaved回调 - 回退依赖版本:如果不需要1.0版本的新特性,可以将date_range_form_field回退到
^0.0.6版本,该版本兼容intl 0.17.0,不需要做其他代码调整
内容的提问来源于stack exchange,提问作者Eloi
相关产品推荐
相关产品推荐

