Flutter项目pub get依赖版本冲突问题求助
问题背景
克隆同事的Flutter项目后,在同款MacBook Pro上无法运行,执行flutter pub get或flutter upgrade时出现依赖冲突错误。
错误信息
Resolving dependencies...
Note: intl is pinned to version 0.18.1 by flutter_localizations from the flutter SDK.
Because trooms depends on flutter_localizations from sdk which depends on intl 0.18.1, intl 0.18.1 is required.
So, because trooms depends on intl ^0.17.0, version solving failed.
Process finished with exit code 1
项目依赖配置(pubspec.yaml)
name: trooms description: Web, Android and iOS App for TROOMS. publish_to: 'none' version: 1.0.0+1 environment: sdk: ">=2.12.0 <3.0.0" dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter cupertino_icons: ^1.0.4 intl: 0.18.1 json_serializable: ^6.1.6 json_annotation: ^4.4.0 firebase_core: ^2.0.3 firebase_auth: ^4.1.3 cloud_firestore: ^4.1.0 firebase_analytics: ^10.0.6 firebase_crashlytics: ^3.0.6 firebase_performance: ^0.9.0+6 firebase_storage: ^11.0.6 image_picker: ^0.8.6 flutter_image_slideshow: ^0.1.4 cloud_functions: ^4.0.5 logging: ^1.0.2 flutter_riverpod: ^2.1.1 flutter_launcher_icons: ^0.11.0 font_awesome_flutter: ^10.1.0 flutterfire_ui: ^0.4.0+2 url_launcher: ^6.0.20 beamer: ^1.5.3 q_form: git: url: //url flutter_native_splash: ^2.1.5 date_time_picker: ^2.1.0 table_calendar: ^3.0.5 flutter_beacon: ^0.5.1 google_fonts: ^3.0.1 dev_dependencies: flutter_app_name: ^0.1.1 build_runner: ^2.1.10 fake_cloud_firestore: ^2.0.1 firebase_auth_mocks: ^0.9.1 firebase_storage_mocks: ^0.6.0+1 flutter_test: sdk: flutter flutter_lints: ^2.0.1 get: ^4.6.1 flutter_app_name: name: "TROOMS" flutter_icons: android: true ios: true remove_alpha_ios: true image_path: "assets/icon/trooms-ulm-logo.png" adaptive_icon_background: #ffffff flutter_lints: ^1.0.4 flutter: uses-material-design: true generate: true assets: - assets/ - assets/icon/
已尝试的无效方案
- 切换至同事使用的SDK版本v3.7.7,但执行
flutter downgrade v3.7.7只能降级到v3.3.9,无法匹配指定版本 - 将intl包版本改为0.18.1后,出现date_time_picker 2.1.0依赖intl ^0.17.0的冲突错误
- 尝试将flutter_localizations改为
any,提示无法找到该包,对intl执行相同操作也无效
疑问
- date_time_picker与flutter_localizations依赖不同版本的intl导致冲突,该如何解决这类依赖版本冲突问题?
- 为何相同代码在同事设备上可正常运行,是否与SDK版本有关?
解决方案
针对依赖冲突的解决办法
升级date_time_picker到兼容intl 0.18.1的版本
查看date_time_picker的版本更新记录,找到支持intl ^0.18.0的版本(比如最新稳定版),将pubspec.yaml中的date_time_picker: ^2.1.0替换为对应版本,再执行flutter pub get。使用dependency_overrides强制统一intl版本
在pubspec.yaml末尾添加以下配置,强制所有依赖使用intl 0.18.1:dependency_overrides: intl: 0.18.1注意:这种方式会忽略其他依赖对intl的版本要求,需要后续测试date_time_picker功能是否正常,避免潜在兼容性问题。
精准切换到同事使用的Flutter SDK版本
直接用flutter downgrade无法指定版本时,可通过以下两种方式:- 手动下载v3.7.7版本的SDK压缩包,解压后替换本地Flutter SDK目录
- 使用Flutter版本管理工具fvm:
# 安装fvm brew install fvm # 安装指定版本 fvm install 3.7.7 # 在当前项目中使用该版本 fvm use 3.7.7
关于同事设备正常运行的原因
确实和SDK版本直接相关:不同版本的Flutter SDK中,flutter_localizations依赖的intl版本不同。同事使用的v3.7.7版本SDK里,flutter_localizations依赖的intl版本是0.17.x,和项目中指定的intl ^0.17.0兼容;而你当前的SDK版本更高,flutter_localizations已升级为依赖intl 0.18.1,因此触发版本冲突。
内容的提问来源于stack exchange,提问作者JAgüero

