如何正确为Flutter自定义包添加环境变量?
问题原因与解决方案
核心原因
Flutter的资源(Asset)加载机制是以主应用为核心的:
- 自定义包的资源不会自动被打包进主应用,必须由主应用在自身的
pubspec.yaml中显式引用。 - 当自定义包的代码在主应用中运行时,所有资源路径都是相对于主应用的资源根目录,而非自定义包的目录。
这就是为什么你的自定义包能读取主App的1.env(它被主App的pubspec配置并打包),却找不到自身的2.env(主App没引用,所以没被打包)。
解决步骤
1. 确保自定义包的资源配置正确
自定义包的pubspec.yaml中,资源路径是相对于包自身根目录的,保持原有配置即可:
assets: - 2.env
同时确认2.env文件放在自定义包的根目录(和pubspec.yaml同级)。
2. 主应用显式引用自定义包的资源
在主App的pubspec.yaml中,添加对自定义包资源的引用,路径格式为packages/[包名]/[资源路径]:
assets: - 1.env - packages/my_package/2.env
3. 修改自定义包的加载路径
自定义包中加载2.env时,必须使用完整的包资源路径,对应主App中配置的路径:
void main() async { WidgetsFlutterBinding.ensureInitialized(); // 使用完整的包资源路径 await dotenv.load(fileName: 'packages/my_package/2.env'); print(dotenv.env['ENV_TYPE']!); }
补充说明
你之前尝试在自定义包的pubspec中写- packages/my_package/2.env是错误的——包自身的资源配置不需要加packages/[包名]前缀,这个前缀是主应用引用包资源时才需要的。
内容的提问来源于stack exchange,提问作者Hamid
相关产品推荐
相关产品推荐

