2022-04-12 dependency_overrides

dependency_overrides 用来解决package 依赖冲突

假设你想在应用中使用 some_packageother_package,并且它们依赖于不同版本的 url_launcher。于是我们便有了潜在的冲突。避免这种情况的最好方法是 package 的作者在指定依赖项时使用 版本范围 而非特定版本

dependencies:
  url_launcher: ^5.4.0    # Good, any version >= 5.4.0 but < 6.0.0
  image_picker: '5.4.3'   # Not so good, only version 5.4.3 works.

如果 some_package 声明了以上依赖,并且 another_package 声明了一个兼容的 url_launcher 依赖项,如 '5.4.6'^5.5.0, pub 能够自动解决冲突问题。 Gradle modulesCocoaPods 也是用类似的方式解决平台依赖的。

即使 some_packageanother_package 声明了不兼容的 url_launcher 版本,它们实际上仍可能以兼容的方式使用 url_launcher。在这种情况下,可在 pubspec.yaml 文件中添加一个依赖覆盖声明来强制使用特定版本,从而处理冲突。

为了强制使用版本为 5.4.0url_launcher,你可以对应用的 pubspec.yaml 文件做如下更改:

dependencies:
  some_package:
  another_package:
dependency_overrides:
  url_launcher: '5.4.0'

如果依赖冲突项不是 package 自身,而是如 guava 这样特定于 Android 的库,那么依赖的覆盖声明必须添加到 Gradle 的构建逻辑中。

为了强制使用版本为 28.0 的 guava,你可以对 android/build.gradle 文件做如下更改:

 configurations.all {
    resolutionStrategy {
        force 'com.google.guava:guava:28.0-android'
    }
}

CocoaPods 目前尚不提供依赖项覆盖功能。

具体案例

主工程:

name: fairdemo
description: A new Flutter project.

publish_to: 'none' # Remove this line if you wish to publish to pub.dev

version: 1.0.0+1

environment:
  #允许不开启nullsafety
  sdk: ">=2.0.0-dev.68.0 <3.0.0"
  #2.12.0以上,所有依赖package必须要升级nullsafety
#  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  fair:
    path: ../fair/fair

dependency_overrides:
  fair_version:
    path: ../fair/flutter_version/flutter_1_22_4


dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^1.4.0
  fair_compiler:
    path: ../fair/compiler


flutter:
  uses-material-design: true


默读英文不自然的舌头就大了起来
flutter 1.17.3 

  dependencies:
   
    meta: 1.1.8


fair_compiler

  dependencies:
   
    analyzer: ^0.41.2


analyzer-0.41.2


  dependencies:
   
    meta: ^1.2.3

所以,flutter sdk 的meta版本和 fair_compiler 依赖的analyzer-0.41.2 下的 meta版本

不一致
导致flutter pub get失败

analyzer:^0.41.2
>=0.41.2,<1.0.0
image.png

fair_compiler依赖的analyzer0.41.2是非空安全版本的最后一个版本

meta: ^1.2.3
>=1.2.3,<2.0.0
image.png

为了能使用到fair_compiler ->analyzer0.41.2->meta>=1.2.3,<2.0.0
flutter1.17.3 meta: 1.1.8
flutter1.22.5 meta: 1.3.0-nullsafety.3
flutter 2.2.2 meta: 1.3.0
flutter 2.5.0 meta: 1.7.0

\color{red} {因为flutter1.17.3的meta和fair的fair_compiler ->analyzer0.41.2->meta>=1.2.3,<2.0.0不匹配}

所以,这个分支的fair不支持flutter1.17.3

image.png

https://docs.flutter.dev/development/tools/sdk/releases?tab=macos

切换到1.22.4试试

果然好了

image.png

flutter pub run build_runner build

image.png

报的这个error是什么意思

image.png

按照环境fair接入MacOS-环境准备
环境应该没什么问题
1、flutter doctor

image.png

2、安装ndk、和cmake


image.png
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容