Flutter依赖版本冲突求助:intl_translation与flutter_localizations兼容问题
问题描述
执行flutter pub get时触发版本解析失败,错误日志:
% flutter pub get Resolving dependencies... (1.5s) Note: meta is pinned to version 1.10.0 by flutter_localizations from the flutter SDK. See https://dart.dev/go/sdk-version-pinning for details. Because every version of flutter_localizations from sdk depends on meta 1.10.0 and analyzer >=6.3.0 depends on meta ^1.11.0, flutter_localizations from sdk is incompatible with analyzer >=6.3.0. And because every version of member_end from path depends on intl_translation ^0.19.0 which depends on analyzer ^6.3.0, flutter_localizations from sdk is incompatible with member_end from path. So, because member_end_app depends on both flutter_localizations from sdk and member_end from path, version solving failed.
本地开发环境:
% flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 3.16.9, on macOS 12.7.1 21G920 darwin-x64, locale zh-Hans-CN) [✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0) [✓] Xcode - develop for iOS and macOS (Xcode 14.2) [✓] Chrome - develop for the web [✓] Android Studio (version 2023.1) [✓] VS Code (version 1.85.1) [✓] Connected device (2 available) [✓] Network resources • No issues found!
冲突根因:
intl_translation ^0.19.0依赖analyzer >=6.3.0,而analyzer >=6.3.0要求meta ^1.11.0,但flutter_localizations被Flutter SDK固定绑定meta 1.10.0,导致二者依赖链冲突,需同时保留intl_translation和flutter_localizations功能。
项目pubspec.yaml配置:
name: member_end_app description: "flutter front member end application base." publish_to: 'none' version: 1.0.0+1 environment: sdk: '>=3.2.3 <4.0.0' dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter member_end: path: ../member_end member_end_flutter: path: ../member_end_flutter json_annotation: ^4.8.1 riverpod: ^2.4.9 riverpod_annotation: ^2.3.3 cupertino_icons: ^1.0.2 go_router: ^13.0.1 font_awesome_flutter: ^10.6.0 flutter_riverpod: ^2.4.9 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^3.0.1 json_serializable: ^6.7.1 build_runner: ^2.4.7 integration_test: sdk: flutter riverpod_generator: ^2.3.9 custom_lint: ^0.5.7 riverpod_lint: ^2.3.7 go_router_builder: ^2.4.1 build_verify: ^3.1.0 flutter: uses-material-design: true assets: - assets/images/ flutter_intl: enabled: true
解决方案
方法1:降级intl_translation版本
修改member_end包的pubspec.yaml,将intl_translation版本从^0.19.0改为^0.18.1。该版本依赖的analyzer范围是>=5.12.0 <6.0.0,不会与meta 1.10.0产生冲突。
方法2:升级Flutter SDK至稳定版3.17+
Flutter 3.17及以后的稳定版本中,flutter_localizations已将meta依赖更新至1.11.0+,可直接解决版本冲突。执行以下命令升级:
flutter channel stable flutter upgrade
方法3:强制指定meta版本(风险项)
在项目根目录的pubspec.yaml中添加dependency_overrides,强制使用meta 1.11.0。此方法可能引发未知兼容性问题,需全面测试验证:
dependency_overrides: meta: ^1.11.0
方法4:用flutter_intl替代intl_translation
项目已启用flutter_intl插件,可直接用它替代intl_translation的本地化代码生成功能。无需依赖intl_translation包,直接执行flutter pub run flutter_intl:generate即可生成所需本地化文件,彻底规避依赖冲突。
内容的提问来源于stack exchange,提问作者coolboy

