使用FormBuilderDateRangePicker时报错不存在selectableDayPredicate参数
报错原因
- 你使用的
flutter_form_builder依赖包触发了大版本升级,v7.0.0及以上版本对FormBuilderDateRangePicker组件的API做了破坏性调整:原顶层参数selectableDayPredicate被移除,迁移至datePickerConfig配置项内部,旧代码直接传递顶层参数就会抛出该错误。 - 该问题通常是执行了
flutter pub upgrade命令,没有锁死依赖大版本,自动拉取了不兼容的新版包导致。
解决方法
方案1:适配新版API(推荐)
将selectableDayPredicate参数移入datePickerConfig配置即可,修改后的代码示例:
FormBuilderDateRangePicker( onChanged: (val) => onEditing(val), // 新增datePickerConfig配置,将参数移入此处 datePickerConfig: DatePickerConfig( selectableDayPredicate: (DateTime val) => !val.isAfter(DateTime.now()), ), autofocus: true, locale: Locale(_myLocale), name: "choose_date_range", firstDate: DateTime(2017), lastDate: DateTime(DateTime.now().year + 1), format: DateFormat("yyyy-MM-dd"), ... )
提示:原代码中的三元表达式val.isAfter(DateTime.now()) ? false : true可直接简化为!val.isAfter(DateTime.now()),逻辑完全一致
方案2:锁定旧版本依赖
如果不想调整现有代码,可直接在pubspec.yaml中锁定flutter_form_builder的大版本为6.x,避免自动升级到不兼容版本:
dependencies: flutter_form_builder: ^6.1.0
修改后执行flutter pub get重新拉取依赖即可恢复正常。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

