如何在Flutter/Dart中控制包的传递依赖对外暴露?
Dart中控制传递依赖可见性的方案
针对你提出的需求——让应用A1只能访问P1暴露的p3,无法访问p2,Dart没有像Android Gradle中implementation/api那样直接对应的关键字,但可以通过以下两种核心方式实现类似效果:
1. 通过代码导出控制API可见性
这是最常用的方式,能完全控制哪些依赖的API对外暴露:
- 暴露p3给A1:在P1的核心库文件(比如
lib/p1.dart)中显式导出p3的公开API:
这样A1在依赖P1后,无需额外添加p3依赖,就能直接使用p3的功能。// lib/p1.dart export 'package:p3/p3.dart'; // 同时导出P1自身的API export 'src/my_p1_api.dart'; - 隐藏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
相关产品推荐
相关产品推荐

