Flutter使用flutter_form_builder提示不存在anchorPoint命名参数报错
Flutter Form Builder 集成编译报错
问题现象
- 过往项目中使用Flutter Form Builder从未出现无法解决的异常,本次在新项目集成该库时直接触发编译报错
- 已尝试执行
flutter clean清理项目缓存、flutter pub get重新拉取依赖,再执行flutter run启动项目,问题没有任何改善 - 完整报错截图:

业务侧测试代码
复现问题使用的表单代码如下,代码本身无语法错误:
FormBuilder( key: _formKey, child: Column( children: [ FormBuilderTextField( name: 'age', decoration: const InputDecoration( labelText: 'This value is passed along to the [Text.maxLines] attribute of the [Text] widget used to display the hint text.', ), onChanged: (value) {}, // valueTransformer: (text) => num.tryParse(text), keyboardType: TextInputType.number, ), ], ), )
核心报错日志
../../FlutterDev/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-7.2.1/lib/src/fields/form_builder_date_time_picker.dart:355:7: Error: No named parameter with the name 'anchorPoint'. anchorPoint: widget.anchorPoint, ^^^^^^^^^^^ ../../FlutterDev/flutter/packages/flutter/lib/src/material/date_picker.dart:133:19: Context: Found this candidate, but the arguments don't match. Future<DateTime?> showDatePicker({ ^^^^^^^^^^^^^^ ../../FlutterDev/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_form_builder-7.2.1/lib/src/fields/form_builder_date_time_picker.dart:373:7: Error: No named parameter with the name 'anchorPoint'. anchorPoint: widget.anchorPoint, ^^^^^^^^^^^ ../../FlutterDev/flutter/packages/flutter/lib/src/material/time_picker.dart:2413:20: Context: Found this candidate, but the arguments don't match. Future<TimeOfDay?> showTimePicker({ ^^^^^^^^^^^^^^
故障原因
报错核心是Flutter SDK与flutter_form_builder版本不匹配:showDatePicker、showTimePicker组件的anchorPoint命名参数是Flutter较高版本才新增的API,当前本地安装的Flutter SDK版本偏低,没有这个参数,但依赖拉取到的flutter_form_builder 7.2.1版本内部已经在调用这部分高版本API,因此编译时直接抛出参数不存在的错误,和你编写的业务表单代码无关。
解决方法
- 升级本地Flutter SDK:将Flutter升级到3.0及以上稳定版本,匹配flutter_form_builder 7.2.1的版本要求,升级后依次执行
flutter clean、flutter pub get重启项目即可 - 降低flutter_form_builder版本:如果暂时不能升级Flutter SDK,打开项目根目录的
pubspec.yaml文件,将flutter_form_builder的版本约束调整为^7.1.0(该版本未调用anchorPoint相关高版本API,兼容低版本Flutter),保存后重新执行flutter pub get拉取依赖即可 - 临时应急方案:如果需要快速验证效果,可以打开报错提示的本地缓存文件
flutter_form_builder-7.2.1/lib/src/fields/form_builder_date_time_picker.dart,注释掉第355行、373行的anchorPoint: widget.anchorPoint,代码,即可临时通过编译。注意该修改会在下次执行flutter pub cache repair或重新拉取依赖后被覆盖,仅适合临时调试使用。
内容的提问来源于stack exchange,提问作者Asmaa Khaled
相关产品推荐
相关产品推荐

