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文件,更稳定安全:
- 修改
ConfigEnv类直接读取编译定义的参数:
class ConfigEnv { static String get baseUrl { return const String.fromEnvironment( 'API_URL', defaultValue: 'https://your-dev-api.com' // 开发环境默认值 ); } }
- 构建开发版本时可直接运行,构建发布版本时使用命令:
flutter build web --dart-define=API_URL=https://your-production-api.com
内容的提问来源于stack exchange,提问作者Anny
相关产品推荐
相关产品推荐

