背景

接到一个需求,需要展示一个环状图和一个柱状图,去pub上逛了一圈,选择了功能比较全的MPFlutterChart 库。引入项目时,发现MPFlutterChart 和国际化包flutter_localizations依赖不同的intl版本。为了能使用MPFlutterChart 库,尝试了以下几种解决冲突的方法。
网上查找方法时,看到了这篇文章:https://www.cnblogs.com/pjl43/p/9943882.html,以下方案一到方案三都是这篇文章了的。

方案一,手动尝试历史版本

在pub上查看库的历史版本,往前尝试,找到一个不冲突的版本。方法太笨,不建议采用。

方案二,版本设置为any

设置版本号为any,则AS会自己查找不冲突的版本,引入依赖。相当于机器帮做了手动尝试的过程。如果能找到不冲突的版本,则可以使用方案三来优化。

方案三,从pubspec.lock找到具体版本号

方案二生效后,我们在pubspec.yaml里面看不到使用的具体版本号。这是可以去pubspec.lock中查看项目所依赖的具体版本,可把pubspec.yaml中的any替换成pubspec.lock的具体版本号。(该文章说是在pubspec.lock.yaml,不知是笔误还是因为flutter版本与我的不一样)。

以下是方案二无用情况下的处理

方案四,引入本地库,手动改版本

上面方案二很好,遗憾的是,对我的情况无用。我项目flutter_localizations依赖的intl是0.15.8,而MPFlutterChart 依赖的是0.16.0;而且,MPFlutterChart 是从第一个版本就是依赖0.16.0的,即使设置为any,也找不到依赖0.15.8的版本号。
pub上找不到对应版本,那可以从github上clone代码,修改依赖版本号后,通过本地引入的方式引入。

缺点:
1.下次升级MPFlutterChart 版本,需要重新colone代码,修改依赖版本,不易维护
2.降低intl版本,可能会出现一些在0.16.0版本已被修复的问题,甚至有的新API调不到导致无法运行。

方案五,修改flutter_localizations的依赖版本

降低版本存在风险,那能不能给flutter_localizations升级版本呢?想去pub上查看flutter_localizations依赖的intl版本号,发现无法搜索到。再看下pubspec.yaml文件里的引入方式,它和其他库的引入明显不同。

dependencies:flutter:sdk: flutter#国际化支持flutter_localizations:sdk: flutter

看这引入方式,猜测它应该来自flutter的sdk。打开.packages文件,发现它的路径是%flutter_sdk%packages/flutter_localizations/lib/。打开里面的pubspec.yaml,果然找到了依赖的intl版本是0.15.8,将其改为0.16.0,从新获取依赖,可正常运行。

缺点:
1.此修改只能改自己本地的代码,如果别人拉取项目,而他电脑的依赖版本没修改,依然无法运行,不易于团队协作。
2.修改sdk包的依赖版本,可能会导致API不兼容问题。

方案六,升级flutter_sdk版本

单独修改sdk的依赖版本可能会出现问题,但是整体升级sdk则安全得多,因为每个sdk发布前必然经过大量的测试,尤其是稳定版的sdk。
由于MPFlutterChart 一开始就支持intl 0.16.0,因此猜测它发布的时候,flutter的sdk已经支持到0.16.0了。查看了MPFlutterChart 第一个版本的发布时间,19年9月。查看那段时间的flutter代码,发现果然已经支持0.16.0。所以,如果flutter_升级到1.12.13及以上的稳定版本,就不再有这个问题。

最后

这个问题的原因是我的flutter_sdk版本过低,没跟上官方最新版。但是如果以后还遇到其他第三方库和sdk库版本冲突,可以参考上面思路。

解决flutter 依赖版本冲突的n种方法相关推荐

  1. 解决jsqlparser 依赖版本冲突

    方式一 <dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlpars ...

  2. Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 参考文章: (1)Java解决Hash(散列)冲突的四种方法--开放地址法 ...

  3. 我爱Java系列---【 maven依赖版本冲突的解决方法】

    我爱Java系列---[ maven依赖版本冲突的解决方法] 参考文章: (1)我爱Java系列---[ maven依赖版本冲突的解决方法] (2)https://www.cnblogs.com/hu ...

  4. 解决transition动画与display冲突的几种方法

    解决transition动画与display冲突的几种方法 参考文章: (1)解决transition动画与display冲突的几种方法 (2)https://www.cnblogs.com/ihar ...

  5. Hash算法解决冲突的四种方法

    Hash算法解决冲突的四种方法 参考文章: (1)Hash算法解决冲突的四种方法 (2)https://www.cnblogs.com/lyfstorm/p/11044468.html 备忘一下.

  6. 哈希冲突与解决哈希冲突的两种方法

    哈希冲突与解决哈希冲突的两种方法 1.哈希冲突 2.解决哈希冲突的方法 (1)链接法 (2)开放寻址法 ①线性探查 ②二次探查 ③双重探查 注:本文注重对解决哈希冲突方法的介绍,而非对背后原理的介绍. ...

  7. 什么是android应用程序未安装,Android 解决应用程序未安装的三种方法

    <Android 解决应用程序未安装的三种方法>由会员分享,可在线阅读,更多相关<Android 解决应用程序未安装的三种方法(3页珍藏版)>请在人人文库网上搜索. 1.解决安 ...

  8. 解决声卡爆音/杂音的四种方法

       内容提要:解决声卡爆音/杂音的四种方法,放MP3和电影的时候,总是会出现"噼噼啪啪"的声音,电脑播放任何音频时都会有爆音的情况出现.电脑采用了英特尔酷睿II E4500的处理 ...

  9. java系统慢怎么优化_解决vmware虚拟机速度慢的3种方法

    解决vmware虚拟机速度慢的3种方法 使用vmware虚拟操作系统的好处不用多说,但如果虚拟机运行速度十分缓慢,正常使用很卡的话是很痛苦的.本文介绍了3种提高虚拟机运行速度的方法,都是古意人实际操作 ...

最新文章

  1. 谢文睿:西瓜书 + 南瓜书 吃瓜系列 4. 二分类线性判别分析
  2. 没那么复杂,只需要一个故事就能理解NIO!
  3. 如何使用Quagga,将你的CentOS设备变成OSPF路由器
  4. ANDROID内核和驱动篇-ANDROID内核介绍(转)
  5. oracle tranc,ORACLE TRUNC()函数
  6. 【OpenCV】图像几何变换:旋转,缩放,斜切
  7. ajax跨域访问控制
  8. bzoj1449 [JSOI2009]球队收益
  9. 兼容IE和火狐JS父窗口调用iframe里面的对象、函数的方法
  10. 极光短信验证码JAVA_Android如何集成极光短信验证
  11. python机器学习之决策树详解
  12. 电子设计大赛-仪器仪表类题目分析
  13. IDEA打包普通Java web项目
  14. 破解iOS微信骰子和猜拳
  15. 【编程之外】当遮羞布被掀开,当人们开始接受一切
  16. 挖掘用户反馈中的宝藏——NLP文本标签化解密
  17. Linux_ubuntu系统安装Flash插件
  18. 易语言 hex16进制转换base64编码
  19. Android 镜像
  20. 装逼必备:大型分布式网站术语分析

热门文章

  1. 陀螺仪计算姿态待完善
  2. Java 集合之 SortedSet 和 SortedMap
  3. Bugku_Misc_一切有为法如梦幻泡影
  4. Spring整合Schedule定时任务详解
  5. miniconda总结
  6. 【收藏资源】超好用的软件开发辅助软件——GeekSpeed
  7. php key数组转字符串,学习猿地-php怎么将数组转化成字符串
  8. mysql非主键索引_主键索引和非主键索引解析
  9. Hackbar的安装与使用
  10. MySQL的初次见面礼基础实战篇