Flutter中share_plus与open_file的ffi版本冲突解决及多版本导入疑问
报错信息(中文翻译)
[testesFlutter] flutter pub get
在testesFlutter中执行"flutter pub get"...
正在解析依赖...
因为 open_file >=3.1.0 依赖 ffi ^1.0.0,而 share_plus 6.3.1 依赖 ffi ^2.0.1,所以 open_file >=3.1.0 和 share_plus 6.3.1 不兼容。
因此,由于 view_page_testes 同时依赖 share_plus 6.3.1 和 open_file 3.2.1,版本解析失败。
pub get 执行失败
命令: "/Users/lucasbarreto/flutter/bin/cache/dart-sdk/bin/dart __deprecated_pub --directory . get --example"
pub 环境变量: {
"FLUTTER_ROOT": "/Users/lucasbarreto/flutter",
"PUB_ENVIRONMENT": "vscode.dart-code:flutter_cli:get",
"PUB_CACHE": "/Users/lucasbarreto/.pub-cache",
}
退出码: 1
核心问题解答
Dart/Flutter的包管理系统不支持导入同一库的两个不同版本,这种操作会直接导致依赖解析失败,因此不能通过该方式解决冲突。
可行的解决方法
1. 升级open_file到兼容ffi 2.x的版本
检查open_file的最新版本,确认是否已更新ffi依赖至2.x系列。修改pubspec.yaml指定最新兼容版本后执行flutter pub get:
dependencies: share_plus: ^6.3.1 open_file: ^[最新兼容版本]
2. 降级share_plus到兼容ffi 1.x的版本
如果open_file暂无更新,可选择降级share_plus至依赖ffi 1.x的版本(例如5.x系列)。修改pubspec.yaml:
dependencies: share_plus: ^5.0.0 open_file: ^3.2.1
3. 使用dependency_overrides强制统一ffi版本
通过dependency_overrides配置,强制所有依赖使用同一个ffi版本。注意此方法可能存在兼容性风险,需全面测试两个库的功能:
dependency_overrides: ffi: ^2.0.1
或指定1.x版本:
dependency_overrides: ffi: ^1.0.0
配置完成后执行flutter pub get,验证功能正常。
4. 替换冲突库
若上述方法均无效,可考虑替换其中一个库:
- 用
open_filex替代open_file - 选择其他分享类库替代
share_plus
确保替换后的两个库依赖无冲突。
内容的提问来源于stack exchange,提问作者Lucas Barreto Luz

