快速解决flutter中package包版本冲突问题
前言
flutter开发,很多原生的需求,要用到插件, pub.flutter-io.cn/ ,用起来真香,想要的插件自己搜就是了。但是如果是新装一个插件导致与原来的版本冲突怎么解决呢?
问题
spec.yaml 文件下
dependencies:
// 中间省略了其他的插件
flutter_plugin_pdf_viewer: any
flutter pub get 发现如下报错:
Because advance_pdf_viewer <1.1.0 depends on rxdart ^0.21.0 and advance_pdf_viewer >=1.1.0 <1.2.0 depends on path_provider ^1.6.5, advance_pdf_viewer <1.2.0 requires rxdart ^0.21.0 or path_provider ^1.6.5.
And because advance_pdf_viewer >=1.2.0 <1.2.1 depends on path_provider ^1.6.11, advance_pdf_viewer <1.2.1 requires rxdart ^0.21.0 or path_provider ^1.6.5.
And because advance_pdf_viewer ^1.2.1 depends on path_provider ^1.6.24 and advance_pdf_viewer >=2.0.0 depends on flutter_cache_manager ^3.0.2, every version of advance_pdf_viewer requires path_provider ^1.6.5 or rxdart ^0.21.0 or flutter_cache_manager ^3.0.2.
And because flutter_cache_manager >=3.0.2 depends on rxdart >=0.26.0 <0.28.0 and h3yunapp depends on rxdart ^0.25.0, every version of advance_pdf_viewer requires path_provider ^1.6.5.
So, because h3yunapp depends on both path_provider ^2.0.1 and advance_pdf_viewer any, version solving failed.
pub get failed (1; So, because h3yunapp depends on both path_provider ^2.0.1 and advance_pdf_viewer any, version solving failed.)
exit code 1
解决有两种方法:
1.找到所有的冲突的插件,不写版本号,而是改成 any, 执行flutter pub get (vscode 保存会自动执行 flutter pub get)让它们自己去匹配彼此之间合适版本包。
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
rxdart: any
path_provider: any
flutter_plugin_pdf_viewer: any
上面只粘贴了冲突的依赖
[h3yun-mobile-app] flutter pub get
Running "flutter pub get" in h3yun-mobile-app... 2,832ms
exit code 0
冲突解决了,你以为完了吗? 哈哈哈,当然不行。any相当于给依赖松绑,你不清楚它依赖的具体版本号,正常开发每个项目依赖的包版本肯定需要具体明确,不然过后可能又会遇到灾难错误。所以,在根目录下找到pubspec.lock.yarm文件,看到
rxdart:
dependency: "direct main"
description:
name: rxdart
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.25.0"
……
path_provider:
dependency: "direct main"
description:
name: path_provider
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.5.0+1"
……
flutter_plugin_pdf_viewer:
dependency: "direct main"
description:
name: flutter_plugin_pdf_viewer
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.3"
需要把刚刚 any替换掉
spec.yaml 文件下
dependencies:
// 中间省略了其他的插件
flutter_plugin_pdf_viewer: ^1.0.3
path_provider: ^0.5.0+1
rxdart: ^0.25.0
完美解决!
2 修改安装依赖的包的源码
如 第一种方法操作完,发现 path_provider: ^0.5.0+1(原来是^2.0.0,我不知道项目中会不会出现其他的问题,因为这个已经在项目中很多地方用了,总感觉不放心,那第二种方法值得收藏) path_provider: ^0.5.0+1 flutter_plugin_pdf_viewer: ^1.0.3
安装的依赖包是 flutter_plugin_pdf_viewer 去pub.flutter-io.cn/
然后forkfork这个项目, 至于fork的作用,相当于你在github服务器端clone了一次这个项目,这也意味着你拥有了一个这个项目的副本,也就拥有了修改的权利,因为现在这个副本是在你的帐号下.
git clone 下来,然后找到 pubspec.yaml
dependencies:
flutter:
sdk: flutter
flutter_cache_manager: ^1.0.0
path_provider: ^1.1.0
rxdart: ^0.21.0
numberpicker: ^1.0.0
flutter_advanced_networkimage: ^0.5.0
跟第一种方法一样,适配依赖之后是
会到项目中去,安装 flutter_plugin_pdf_viewer 依赖
下面三种方法任意一种都可以
flutter_plugin_pdf_viewer:
git:
url: git@github.com:chenbing11/flutter_plugin_pdf_viewer.git //github地址
ref: 93313b82b9f8d9019d3283f864e5423d67f39c // commit 信息
2.把修改之后源码下载本地项目中
flutter_audio_recorder:
path: 相对路径 //如path: plugins/flutter_plugin_pdf_viewer
- 直接发布一个新的插件
转载自:https://juejin.cn/post/7041147208636301349