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

Flutter Web部署后拼接Base URL被替换为域名问题咨询

Flutter Web部署后环境变量Base URL被替换为应用域名的问题解决

问题原因

  • 本地运行时.env文件能被正确读取,但部署后.env文件未被打包到Web产物中,导致dotenv.env['API_URL']返回空值,baseUrl变成空字符串。此时拼接API地址时,浏览器会自动将当前Web应用的域名作为Base URL补全,出现你遇到的现象。
  • 另一种可能是dotenv的初始化时机错误,Web环境下加载资产文件是异步操作,如果未等待加载完成就使用baseUrl,也会导致读取失败。

解决方法

方法1:确保.env文件被正确打包到Web产物

在pubspec.yaml的assets节点中添加.env文件配置,确保编译时将文件打包进去:

flutter:
  assets:
    - .env.develop
    - .env.production

执行flutter pub get更新配置后,重新构建发布版本。

方法2:修正dotenv初始化逻辑

在main函数中异步加载.env文件,确保环境变量读取完成后再启动应用:

void main() async {
  await dotenv.load(fileName: ConfigEnv.fileName);
  runApp(const MyApp());
}

方法3:编译时注入环境变量(推荐)

改用编译时注入参数的方式,避免运行时依赖.env文件,更稳定安全:

  1. 修改ConfigEnv类直接读取编译定义的参数:
class ConfigEnv {
  static String get baseUrl {
    return const String.fromEnvironment(
      'API_URL',
      defaultValue: 'https://your-dev-api.com' // 开发环境默认值
    );
  }
}
  1. 构建开发版本时可直接运行,构建发布版本时使用命令:
flutter build web --dart-define=API_URL=https://your-production-api.com

内容的提问来源于stack exchange,提问作者Anny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:05:01