升级Flutter 2.5.1后运行项目出现filepicker_windows包类型不匹配报错
问题原因
该错误是filepicker_windows v2.0.0与win32 v2.3.0的FFI类型定义不兼容导致:高版本win32修改了Pointer<COMObject>的参数声明规则,和旧版filepicker_windows的调用逻辑不匹配,触发了类型校验错误。
解决方案
方案一:升级file_picker依赖(推荐)
新版file_picker已经官方修复了该兼容问题,操作步骤如下:
- 打开项目根目录的
pubspec.yaml文件 - 将
file_picker的版本约束调整为^4.0.0及以上 - 执行
flutter pub upgrade命令更新依赖 - 重新运行项目即可
方案二:强制锁定win32兼容版本(临时解决方案)
如果暂时不方便升级file_picker大版本,可以通过强制覆盖依赖版本解决冲突:
- 打开
pubspec.yaml文件,新增如下配置:
dependency_overrides: win32: 2.2.9
- 执行
flutter pub get命令刷新依赖 - 重新构建项目即可
方案三:手动修改源码(应急临时方案)
如果上述两个方案都不适用,可以直接修改本地缓存的报错代码修正类型问题:
- 找到报错的三个文件:
filedialog.dart、opendialog.dart、savedialog.dart - 将报错行的参数添加强制类型转换:
knownFolderManager.GetFolder(publicMusicFolder, ppkf.cast<Pointer<COMObject>>())fileDialog.GetResult(ppsi.cast<Pointer<COMObject>>())
- 保存修改后重新运行项目即可,注意该修改仅本地生效,重新拉取依赖后会被覆盖。
内容的提问来源于stack exchange,提问作者Bhavin Khunt
相关产品推荐
相关产品推荐

