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

如何在Flutter/Dart中控制包的传递依赖对外暴露?

Dart中控制传递依赖可见性的方案

针对你提出的需求——让应用A1只能访问P1暴露的p3,无法访问p2,Dart没有像Android Gradle中implementation/api那样直接对应的关键字,但可以通过以下两种核心方式实现类似效果:

1. 通过代码导出控制API可见性

这是最常用的方式,能完全控制哪些依赖的API对外暴露:

  • 暴露p3给A1:在P1的核心库文件(比如lib/p1.dart)中显式导出p3的公开API:
    // lib/p1.dart
    export 'package:p3/p3.dart';
    // 同时导出P1自身的API
    export 'src/my_p1_api.dart';
    
    这样A1在依赖P1后,无需额外添加p3依赖,就能直接使用p3的功能。
  • 隐藏p2:不在P1的任何公开导出文件中提及p2。即使P1的pubspec.yaml中声明了p2为运行时依赖,A1也无法直接引用package:p2/p2.dart来使用其API(除非A1主动添加p2为自身依赖,但这属于外部主动引入,不在你的控制范围内)。

2. 区分运行时依赖与开发依赖

如果p2只是P1开发阶段的工具类(比如测试框架、代码生成工具),而非P1运行时必须的依赖,可以将p2放在dev_dependencies中:

# P1的pubspec.yaml
dependencies:
  p3: ^x.y.z  # 运行时依赖,会传递给A1
dev_dependencies:
  p2: ^a.b.c  # 仅开发P1时使用,不会传递给A1

这种情况下,A1依赖P1时不会拉取p2,自然完全无法访问p2。


内容的提问来源于stack exchange,提问作者n.arrow001

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:43:05