运行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子命令之前,而非--之后的位置。
修改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参数,避免构建时的文件冲突问题。保留launch.json配置不变:
你launch.json里的--dart-define是给Flutter应用运行时使用的,和build_runner的构建参数互不影响,无需修改。
内容的提问来源于stack exchange,提问作者Drompai
相关产品推荐
相关产品推荐

