nig*_*ong 8 dart dart-pub flutter
在 Dart/Flutter 项目中,我有
dependencies:
graphql: '^2.1.1-beta.5'
flutter_bloc: ^3.0.0
Run Code Online (Sandbox Code Playgroud)
作为依赖。但是,graphql取决于rxdart: ^0.22.0和flutter_bloc取决于rxdart: ^0.23.0,这给了我错误:
Because flutter_bloc >=3.0.0 depends on bloc ^3.0.0 which depends on rxdart ^0.23.0, flutter_bloc >=3.0.0 requires rxdart ^0.23.0.
And because graphql 2.1.1-beta.5 depends on rxdart ^0.22.0 and no versions of graphql match >2.1.1-beta.5 <3.0.0, flutter_bloc >=3.0.0 is incompatible with graphql ^2.1.1-beta.5.
So, because com.myapp depends on both graphql ^2.1.1-beta.5 and flutter_bloc ^3.0.0, version solving failed.
Run Code Online (Sandbox Code Playgroud)
我的临时解决方法是降级flutter_bloc到^2.1.1,它使用rxdart ^0.23.0. 但是如果我想使用最新最好的版本flutter_bloc,最好的解决方案是什么?
谢谢!
您可以在以下位置使用依赖项覆盖pubspec.yaml:
dependency_overrides:
rx_dart: ^0.23.0
Run Code Online (Sandbox Code Playgroud)
请注意,如果您这样做,依赖于您覆盖的依赖项的另一个版本的插件可能会中断。
免责声明:我不是答案的所有者。我只是发布参考答案:https : //iiro.dev/resolving-dart-package-version-conflicts/
这对我有帮助。
假设你有这样的问题:
Because intl_translation 0.17.0 depends on petitparser ^1.1.3 and xml >=3.2.0
depends on petitparser ^2.0.0, intl_translation 0.17.0 is incompatible with xml >=3.2.0.
So, because my_project depends on both xml ^3.2.0 and intl_translation 0.17.0,
version solving failed.
Run Code Online (Sandbox Code Playgroud)
pubspec 文件可能看起来像这样:
pubspec.yaml
dependencies:
# ...
xml: ^3.2.0
intl_translation: ^0.17.0
Run Code Online (Sandbox Code Playgroud)
解决方案:解决此问题的最快方法是将两个冲突的依赖项的版本都设置为any.
pubspec.yaml
dependencies:
# ...
xml: any # <- don't leave me like this - read further!
intl_translation: any # <- don't leave me like this either!
Run Code Online (Sandbox Code Playgroud)
^^这不是解决方案,还有一步!
输出可能如下所示:
Resolving dependencies...
Got dependencies!
Run Code Online (Sandbox Code Playgroud)
在构建项目后,您应该收紧依赖版本以像以前一样使用语义版本控制。打开生成的 pubspec.lock 文件,找到之前冲突的依赖项。
pubspec.lock
# Generated by pub
# See https://www.dartlang.org/tools/pub/glossary#lockfile
packages:
xml:
# ...
version: "3.0.1" # the version of "xml" package that worked fine
# with "intl_translation".
intl_translation:
# ...
version: "0.17.0" # the version of "intl_translation" package
# that worked fine with "xml".
Run Code Online (Sandbox Code Playgroud)
从那个锁文件中,我们可以看到 xml 包版本3.0.1和 intl_translation 包版本0.17.0配合得很好。作为最后一步,将 any 替换为 pubspec 文件中的正确版本:
pubspec.yaml
dependencies:
# ...
xml: ^3.0.1
intl_translation: ^0.17.0
Run Code Online (Sandbox Code Playgroud)
最后一次通过运行flutter packages get来重新获取您的依赖项以验证这确实有效,然后您就可以开始了。
回答学分:Iiro Krankka
| 归档时间: |
|
| 查看次数: |
6105 次 |
| 最近记录: |