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

如何正确为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:03:23