You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter项目package_info_plus与get_cli依赖冲突求助

Flutter依赖冲突解决:get_cli与package_info_plus版本矛盾

问题概述

在Flutter项目中引入package_info_plus: ^7.0.0后遭遇依赖冲突,根源是get_cli: ^1.8.1与package_info_plus、flutter_localizations的版本依赖矛盾:

  • flutter_localizations强制依赖intl: 0.19.0
  • package_info_plus: ^7.0.0要求win32: >=4.0.0
  • 但get_cli: ^1.8.1的依赖链限制intl最高为0.18.x,且依赖的dart_console要求win32: ^2.0.0,三者无法兼容。此前调整http、internet_connection_checker_plus等包版本或排除依赖均未解决问题。

项目环境与依赖配置

environment:
  sdk: '>=3.1.0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  file: ^7.0.0
  shared_preferences: ^2.0.13
  flutter_localizations:
    sdk: flutter
  intl: any
  get_storage: ^2.1.1
  get_cli: ^1.8.1
  local_session_timeout: ^2.3.1
  go_router: ^14.1.2
  casbin: ^0.1.0
  jwt_decoder: ^2.0.1
  flex_color_scheme: ^7.3.1
  one_clock: ^2.0.1
  cupertino_icons: ^1.0.2
  flutter_dotenv: ^5.1.0
  json_serializable: ^6.7.1
  firebase_core: ^2.24.2
  firebase_messaging: ^14.7.9
  openid_client: ^0.4.8
  hive: ^2.2.3
  hive_flutter: ^1.1.0
  flutter_svg: ^2.0.10+1
  http: ^1.2.0
  flutter_json_view: ^1.1.4
  get: ^4.6.6
  url_launcher: ^6.2.5
  internet_connection_checker_plus: ^2.3.0
  json_annotation: ^4.9.0
  dio: any
  provider: ^6.1.2
  freezed_annotation: ^2.4.1
  footer: ^0.0.4
  font_awesome_flutter: ^10.7.0

具体错误信息

因为 get_cli >=1.8.3 依赖 intl ^0.18.0,且没有 get_cli 版本匹配 >1.8.1 <1.8.3,所以 get_cli >1.8.1 需要 intl ^0.18.0。
又因为 get_cli 1.8.1 依赖 cli_dialog >=0.5.0 <1.0.0,所以 get_cli >=1.8.1 需要 intl ^0.18.0 或 cli_dialog >=0.5.0 <1.0.0。
(1) 因此,由于没有 cli_dialog 版本匹配 >0.5.0 <1.0.0,且 cli_dialog 0.5.0 依赖 dart_console ^1.0.0,所以 get_cli >=1.8.1 需要 intl ^0.18.0 或 dart_console ^1.0.0。

因为没有 dart_console 版本匹配 >1.0.0 <1.1.0-pre.0,且 dart_console >=1.1.0-pre.0 <1.2.0 依赖 intl ^0.17.0,dart_console >1.0.0 <1.2.0 需要 intl ^0.17.0。
又因为 dart_console >=1.2.0 <4.0.0 依赖 intl ^0.18.0,且 dart_console 1.0.0 依赖 win32 ^2.0.0,所以 dart_console >=1.0.0 <4.0.0 需要 win32 ^2.0.0 或 intl ^0.17.0 或 ^0.18.0。
结合 get_cli >=1.8.1 需要 intl ^0.18.0 或 dart_console ^1.0.0 (1),get_cli >=1.8.1 需要 intl ^0.17.0 或 >=0.18.0 <0.19.0 或 win32 ^2.0.0。
又因为 package_info_plus >=4.0.1 依赖 win32 >=4.0.0 <6.0.0,所以若同时使用 package_info_plus >=4.0.1 和 get_cli >=1.8.1,则需要 intl ^0.17.0 或 >=0.18.0 <0.19.0。
而由于 mes_line_in 依赖 sdk 中的 flutter_localizations,后者依赖 intl 0.19.0,因此 package_info_plus >=4.0.1 与 get_cli >=1.8.1 不兼容。
综上,由于 mes_line_in 同时依赖 get_cli ^1.8.1 和 package_info_plus ^7.0.0,版本解析失败。

解决方案

1. 升级get_cli到兼容版本

get_cli的新版本(如^2.0.0及以上)已更新依赖约束,支持intl: 0.19.0和更高版本的win32。修改pubspec.yaml中的get_cli版本:

get_cli: ^2.0.0 # 或最新稳定版

执行flutter pub get,验证冲突是否解决。

2. 降级package_info_plus到兼容版本

将package_info_plus降级到4.0.1以下的版本(如^3.1.0),该版本对win32的依赖为<4.0.0,可与get_cli: ^1.8.1的依赖链兼容,同时兼容intl: 0.19.0:

package_info_plus: ^3.1.0

执行flutter pub get,测试功能是否正常。

3. 使用dependency_overrides强制统一版本(风险较高)

若上述方案不可行,可尝试在pubspec.yaml中添加dependency_overrides,强制指定兼容的intl和win32版本,但需注意可能引发其他依赖的隐性问题:

dependency_overrides:
  intl: 0.19.0
  win32: 4.0.0 # 需确认get_cli的依赖能兼容该版本

执行flutter pub get后,全面测试项目功能,避免潜在崩溃。

替代方案:不使用package_info_plus获取包信息

若不想调整现有依赖版本,可直接读取项目的pubspec.yaml文件获取版本信息:

  1. 在pubspec.yaml的assets中添加:
flutter:
  assets:
    - pubspec.yaml
  1. 编写代码读取并解析版本:
import 'package:flutter/services.dart' show rootBundle;
import 'package:yaml/yaml.dart';

Future<String> getAppVersion() async {
  final yamlString = await rootBundle.loadString('pubspec.yaml');
  final yamlMap = loadYaml(yamlString);
  return yamlMap['version'].toString().split('+')[0]; // 获取主版本号
}

此方法仅能获取编译时的版本信息,无法读取平台原生的包信息(如iOS的CFBundleVersion或Android的versionCode),但可满足多数版本展示需求。

内容的提问来源于stack exchange,提问作者Sachithya Rivisara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:45:59