Flutter版本切换后DropdownSearch报命名参数未定义等错误
报错信息
- 命名参数
favoriteItemsAlignment未定义 - 命名参数
mode未定义 - 命名参数
dropdownSearchDecoration未定义 - 参数类型
List?无法赋值给参数类型List<dynamic Function(dynamic)>
问题涉及代码
Expanded( child: Container( height: 45, child: DropdownSearch( favoriteItemsAlignment: MainAxisAlignment.center, // 对应第1项报错 mode: Mode.DIALOG, // 对应第2项报错 dropdownSearchDecoration: InputDecoration( // 对应第3项报错 disabledBorder: InputBorder.none, hintText: dropdownCityName, hintStyle: TextStyle( color: Colors.black, fontSize: 12, ), ), items: dropdownItems, // 对应第4项报错 onChanged: dropdownOnChangeds, selectedItem: dropdownSelectedItems, ), ), ),
问题场景
将Flutter从稳定版升级至Beta版本后出现上述报错,后续将Flutter版本回退到原有稳定版本,报错仍然存在。
排查修复方案
这类报错和Flutter SDK版本本身没有直接关系,核心原因是升级Flutter过程中项目依赖的dropdown_search包被自动升级到了不兼容的大版本,即使回退Flutter SDK,pub拉取的依赖包版本没有同步回退,就会持续报参数不存在、类型不匹配的错误。按以下步骤操作即可修复:
- 先清理环境残留缓存,依次执行命令:
flutter clean flutter pub cache repair - 打开项目根目录下的
pubspec.yaml文件,检查dropdown_search的依赖版本:
当前代码使用的是2.x版本的API,3.x及以上版本的dropdown_search做了破坏性API更新,已经移除了mode、favoriteItemsAlignment、dropdownSearchDecoration这几个旧参数,同时修改了items字段的类型定义,才会触发全部4个报错。- 如果不需要升级插件,直接把依赖固定到兼容的2.x稳定版,不要使用带
^的版本号避免自动升级大版本:dependencies: flutter: sdk: flutter dropdown_search: 2.0.1 # 固定版本,不要加^ - 如果要使用新版
dropdown_search,需要对照新版API重构组件代码:将弹窗模式配置挪到popupProps参数下,输入框装饰配置挪到dropdownDecoratorProps参数下,收藏项对齐配置也归到popupProps的对应配置项中,同时确保传入items的列表类型和插件要求的类型一致。
- 如果不需要升级插件,直接把依赖固定到兼容的2.x稳定版,不要使用带
- 修改完依赖配置后,执行
flutter pub get拉取对应版本的依赖包,完全重启IDE(不要用热重载),清除之前的编译缓存后重新编译项目即可。 - 如果执行完上述步骤仍报错,检查IDE绑定的Flutter SDK路径,确认当前使用的SDK是你回退后的稳定版,可在终端执行
flutter --version核对版本号是否符合预期。
内容的提问来源于stack exchange,提问作者sonalika
相关产品推荐
相关产品推荐

