解决flutter 依赖版本冲突的n种方法
背景
接到一个需求,需要展示一个环状图和一个柱状图,去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种方法相关推荐
- 解决jsqlparser 依赖版本冲突
方式一 <dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlpars ...
- Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 参考文章: (1)Java解决Hash(散列)冲突的四种方法--开放地址法 ...
- 我爱Java系列---【 maven依赖版本冲突的解决方法】
我爱Java系列---[ maven依赖版本冲突的解决方法] 参考文章: (1)我爱Java系列---[ maven依赖版本冲突的解决方法] (2)https://www.cnblogs.com/hu ...
- 解决transition动画与display冲突的几种方法
解决transition动画与display冲突的几种方法 参考文章: (1)解决transition动画与display冲突的几种方法 (2)https://www.cnblogs.com/ihar ...
- Hash算法解决冲突的四种方法
Hash算法解决冲突的四种方法 参考文章: (1)Hash算法解决冲突的四种方法 (2)https://www.cnblogs.com/lyfstorm/p/11044468.html 备忘一下.
- 哈希冲突与解决哈希冲突的两种方法
哈希冲突与解决哈希冲突的两种方法 1.哈希冲突 2.解决哈希冲突的方法 (1)链接法 (2)开放寻址法 ①线性探查 ②二次探查 ③双重探查 注:本文注重对解决哈希冲突方法的介绍,而非对背后原理的介绍. ...
- 什么是android应用程序未安装,Android 解决应用程序未安装的三种方法
<Android 解决应用程序未安装的三种方法>由会员分享,可在线阅读,更多相关<Android 解决应用程序未安装的三种方法(3页珍藏版)>请在人人文库网上搜索. 1.解决安 ...
- 解决声卡爆音/杂音的四种方法
内容提要:解决声卡爆音/杂音的四种方法,放MP3和电影的时候,总是会出现"噼噼啪啪"的声音,电脑播放任何音频时都会有爆音的情况出现.电脑采用了英特尔酷睿II E4500的处理 ...
- java系统慢怎么优化_解决vmware虚拟机速度慢的3种方法
解决vmware虚拟机速度慢的3种方法 使用vmware虚拟操作系统的好处不用多说,但如果虚拟机运行速度十分缓慢,正常使用很卡的话是很痛苦的.本文介绍了3种提高虚拟机运行速度的方法,都是古意人实际操作 ...
最新文章
- 谢文睿:西瓜书 + 南瓜书 吃瓜系列 4. 二分类线性判别分析
- 没那么复杂,只需要一个故事就能理解NIO!
- 如何使用Quagga,将你的CentOS设备变成OSPF路由器
- ANDROID内核和驱动篇-ANDROID内核介绍(转)
- oracle tranc,ORACLE TRUNC()函数
- 【OpenCV】图像几何变换:旋转,缩放,斜切
- ajax跨域访问控制
- bzoj1449 [JSOI2009]球队收益
- 兼容IE和火狐JS父窗口调用iframe里面的对象、函数的方法
- 极光短信验证码JAVA_Android如何集成极光短信验证
- python机器学习之决策树详解
- 电子设计大赛-仪器仪表类题目分析
- IDEA打包普通Java web项目
- 破解iOS微信骰子和猜拳
- 【编程之外】当遮羞布被掀开,当人们开始接受一切
- 挖掘用户反馈中的宝藏——NLP文本标签化解密
- Linux_ubuntu系统安装Flash插件
- 易语言 hex16进制转换base64编码
- Android 镜像
- 装逼必备:大型分布式网站术语分析