likes
comments
collection
share

快速解决flutter中package包版本冲突问题

作者站长头像
站长
· 阅读数 1

前言

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中package包版本冲突问题

安装的依赖包是 flutter_plugin_pdf_viewer 去pub.flutter-io.cn/

快速解决flutter中package包版本冲突问题

然后forkfork这个项目, 至于fork的作用,相当于你在github服务器端clone了一次这个项目,这也意味着你拥有了一个这个项目的副本,也就拥有了修改的权利,因为现在这个副本是在你的帐号下.

快速解决flutter中package包版本冲突问题

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中package包版本冲突问题

会到项目中去,安装 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

  1. 直接发布一个新的插件

参考:www.jianshu.com/p/a793e2769…