You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flutter中安装excel ^1.1.5版本遭遇依赖冲突问题求助

Flutter项目依赖版本冲突问题排查与解决

最近我在给我的Flutter项目etf安装excel: ^1.1.5包的时候,碰上个头疼的版本冲突问题,pub get直接跑失败了,仔细看错误日志才搞清楚是依赖链的版本矛盾导致的,具体冲突逻辑如下:

冲突根源拆解

  • excel: ^1.1.5属于excel >=1.0.4 <2.0.0-null-safety版本区间,它依赖xml ^4.1.0,而xml ^4.1.0又要求convert ^2.1.0,所以excel包必须使用convert ^2.1.0
  • 但我的项目同时依赖invoiceninja: ^0.0.9,这个包依赖json_serializable ^4.1.0;而json_serializable >=4.0.3又依赖build ^2.0.0build ^2.0.0要求的是convert ^3.0.0
  • 这就造成了convert包的版本要求完全矛盾:一边要^2.1.0,另一边要^3.0.0,两者无法同时满足,最终导致版本解析失败

可行的解决办法

根据这个冲突逻辑,我整理了几个可行的解决方向:

  1. 升级excel到空安全版本:优先推荐这个方案,excel包的>=2.0.0版本已经支持空安全,大概率适配了convert ^3.0.0,能和invoiceninja: ^0.0.9的依赖链兼容。修改pubspec.yaml里的依赖:
    excel: ^2.0.0 # 可以去pub.dev查看最新的稳定版本号
    
  2. 降级相关依赖版本:如果暂时不想升级excel,可以尝试降级json_serializable<=4.0.2(这个版本不依赖build ^2.0.0),或者看看invoiceninja有没有更低版本不依赖高版本json_serializable的。修改示例:
    json_serializable: ^4.0.2
    invoiceninja: ^0.0.9
    
    不过这种方法可能引发其他依赖问题,需要仔细测试功能。
  3. 使用依赖强制覆盖:如果前两种方法都走不通,可以在pubspec.yaml里添加dependency_overrides,强制所有依赖使用同一个convert版本(比如^3.0.0),但这种方法可能会导致excel包出现兼容性问题,一定要充分测试所有相关功能:
    dependency_overrides:
      convert: ^3.0.0
    

我的环境信息

Flutter(Channel dev,2.11.0-0.1.pre,运行于Microsoft Windows [版本10.0.18363.418],区域设置en-US)

内容的提问来源于stack exchange,提问作者Fahad Mustafa

火山引擎 最新活动