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

运行dart run build_runner时,如何向String.fromEnvironment传递环境变量?

问题:如何在运行build_runner时向String.fromEnvironment()传递环境变量?

我正在使用envied_generator和build_runner包,希望根据环境修改@Envied(path: const String.fromEnvironment('environment'))中的路径。通过VS Code的启动配置触发预启动任务(dart run build_runner build --delete-conflicting-outputs)来启动Flutter应用,但const String.fromEnvironment('environment')始终返回空值。尝试使用--define标志传递环境变量,但没有效果,请问该如何正确传递?

更新:我的配置文件

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Dev-Debug",
            "request": "launch",
            "type": "dart",
            "flutterMode": "debug",
            "args": ["--flavor", "dev",
            "--dart-define", "environment=dev"],
            "preLaunchTask": "build_runner_dev"
           }
        ]
    }

tasks.json

{
  "version": "2.0.0",
  "tasks": [
      {
          "label": "build_runner_dev",
          "type": "shell",
          "command": "dart run build_runner build -- --define=environment=dev",
          "group": {
              "kind": "build",
              "isDefault": true
          },
      }
  ]
}

解决方法

问题核心是你传递环境变量的位置错误:--dart-define属于dart run命令的参数,必须放在build_runner子命令之前,而非--之后的位置。

  1. 修改tasks.json中的命令:
    将原命令替换为:

    dart run --dart-define=environment=dev build_runner build --delete-conflicting-outputs
    

    这样String.fromEnvironment('environment')就能在build_runner构建过程中正确读取到dev值,@Envied的path参数也会随之更新。同时加上--delete-conflicting-outputs参数,避免构建时的文件冲突问题。

  2. 保留launch.json配置不变:
    你launch.json里的--dart-define是给Flutter应用运行时使用的,和build_runner的构建参数互不影响,无需修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:32:15