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

为何flutter pub get会提示更新未直接引入的内部依赖?

问题

为何执行flutter pub get命令时,会显示并提示更新一些未在pubspec.yaml文件中直接使用的内部依赖?

flutter pub get执行结果:

Resolving dependencies... (1.2s)
  _fe_analyzer_shared 64.0.0 (65.0.0 available)
  analyzer 6.2.0 (6.3.0 available)
  coverage 1.6.4 (1.7.2 available)
  dart_style 2.3.2 (2.3.4 available)
  ffi 2.1.0 (2.1.2 available)
  flutter_web_auth_2 2.2.1 (3.1.1 available)
  flutter_web_auth_2_platform_interface 2.1.4 (3.1.0 available)
  hotreloader 3.0.6 (4.1.0 available)
  http 1.0.0 (1.2.0 available)
  image 4.1.3 (4.1.4 available)
  js 0.6.7 (0.7.0 available)
  matcher 0.12.16 (0.12.16+1 available)
  material_color_utilities 0.5.0 (0.8.0 available)
  meta 1.10.0 (1.11.0 available)
  package_info_plus 4.2.0 (5.0.1 available)
  path 1.8.3 (1.9.0 available)
  pointycastle 3.7.3 (3.7.4 available)
  smart_auth 1.1.1 (2.0.0 available)
  test 1.24.9 (1.25.1 available)
  test_api 0.6.1 (0.7.0 available)
  test_core 0.5.9 (0.6.0 available)
  time 2.1.3 (2.1.4 available)
  uuid 3.0.7 (4.3.3 available)
  vm_service 11.10.0 (14.0.0 available)
  web 0.3.0 (0.4.2 available)
  web_socket_channel 2.4.0 (2.4.3 available)
Got dependencies!
26 packages have newer versions incompatible with dependency constraints.
Try `flutter pub outdated` for more information.

我的pubspec.yaml文件内容:

environment:
  sdk: '>=3.0.0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  flutter_native_splash: ^2.3.9
  fpdart: ^1.1.0
  flutter_hooks: ^0.20.4
  hooks_riverpod: ^2.4.9
  riverpod_annotation: ^2.3.3
  freezed_annotation: ^2.4.1
  intl: ^0.19.0
  json_annotation: ^4.8.1
  modddels_annotation_fpdart: ^0.2.0
  ulid: ^2.0.0
  flex_color_scheme: ^7.3.1
  google_fonts: ^6.1.0
  theme_extensions_builder_annotation: ^3.0.0
  responsive_framework: ^1.1.1
  go_router: ^13.0.1
  shared_preferences: ^2.2.2
  pinput: ^3.0.1
  firebase_core: ^2.24.2
  firebase_auth: ^4.16.0
  isar: ^4.0.0-dev.14
  isar_flutter_libs: ^4.0.0-dev.14
  path_provider: ^2.1.2
  appwrite: ^11.0.1

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^2.4.8
  freezed: ^2.4.6
  json_serializable: ^6.7.1
  custom_lint: ^0.5.8
  flutter_lints: ^3.0.1
  riverpod_generator: ^2.3.9
  riverpod_lint: ^2.3.7
  flutter_gen_runner: ^5.4.0
  modddels: ^0.2.0
  theme_extensions_builder: ^3.0.1
  go_router_builder: ^2.4.1

我认为只需关注pubspec.yaml中直接引入的依赖,为何会显示上述这类内部依赖?


回答

这些你看到的“内部依赖”其实是间接依赖——也就是你在pubspec.yaml里直接声明的那些依赖,它们自身还依赖了其他包,这些被嵌套引用的包就是间接依赖。

当执行flutter pub get时,Pub包管理器会自动解析整个依赖树:从你直接声明的包出发,递归拉取它们所有需要的子依赖,确保项目能正常构建运行。所以这些间接依赖也会被下载到项目中,自然也会被检测到版本更新。

举个例子:你用的firebase_auth、shared_preferences这类包,内部会依赖http、uuid、package_info_plus这些工具包;而riverpod_generator、build_runner这类开发依赖,又会依赖analyzer、dart_style这类代码分析或格式化工具——这些都是你看到的“未直接使用”的包。

至于提示“新版本不兼容依赖约束”,是因为直接依赖的包在自身的pubspec里对间接依赖的版本做了限制(比如要求http: ^1.0.0,就只能用1.x系列,不能直接升到2.x),所以Pub会告诉你有新版本,但当前约束下没法更新。

如果想理清这些依赖关系,可以执行flutter pub deps命令,它会打印整个依赖树的层级结构,你能清楚看到每个间接依赖是被哪个直接依赖引入的。


内容的提问来源于Stack Exchange,提问作者Jack Wilson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:41:12