在 Flutter/Dart 中如何将参数从命令行传递到 main?

问题描述 投票:0回答:7

如何运行命令并使用 Flutter/Dart 传递一些自定义参数,以便可以在

main()
调用中访问它们,例如:

flutter run -device [my custom arg]

那么我就可以通过以下方式访问它:

void main(List<String> args) {
  print(args.toString());
}

谢谢你。

dart flutter command program-entry-point args
7个回答
60
投票

无法做到这一点,因为当您在设备上启动应用程序时,也不会传递任何参数。

如果这是为了开发,您可以将

-t lib/my_alternate_main.dart
传递给
flutter run
轻松切换不同设置
其中每个备用入口点文件使用不同的参数或使用不同初始化的全局变量调用相同的应用程序代码。

更新

为了

  • flutter run
  • flutter build apk
  • flutter build ios
  • flutter drive

为此目的添加了

--dart-define=...
命令行参数。

其他键值对将作为 String.fromEnvironment、bool.fromEnvironment、int.fromEnvironment 和 double.fromEnvironment 构造函数中的常量提供。

有关更多详细信息,请参阅 Flutter 1.17 不再有 Flavors,不再有 iOS Schemas。改变一切的命令参数

示例

const t = String.fromEnvironment("TEST");
flutter run --dart-define="TEST=from command line"

请注意,

const
是必需的,并且变量名称区分大小写。


33
投票

Android Studio

向 Android Studio Flutter 项目添加命令行参数/环境变量。


编辑

运行 > 编辑配置...

或 单击配置下拉选择器

run/debug config selector

添加

Additional arguments
中添加你的参数(如果没有空格则可以加引号) 2. 如果您愿意,可以添加描述性名称

Name and config arguments

复制

单击复制按钮可根据需要轻松添加更多配置版本

Duplicate config to add more

选择

从下拉列表中选择您的运行配置

Config Selector

使用

在代码中使用你的参数

例如

const String version = String.fromEnvironment('VERSION');

Use Arguments


28
投票

main
方法的参数可以使用参数
--dart-entrypoint-args
(简称:
-a
)来声明,例如

flutter run -d linux --dart-entrypoint-args some_file.xml

7
投票

-dart-define 正在稳定通道版本 1.17 中运行

从命令行

flutter run --dart-define=myVar="some value"

例如 main.dart:

const MY_VAR = String.fromEnvironment('myVar', defaultValue: 'SOME_DEFAULT_VALUE');

3
投票

@Janux 已经回答了正确答案。

我只想举一个简单的例子:

flutter run -d linux -a my_argument
void main(List<String> args) {
  print(args); // flutter: [my_argument]
}

2
投票

我遇到了同样的问题,所以我写了一个包和一些可以提供帮助的说明。

https://pub.dev/packages/launch_args

我不知道如何通过

flutter
命令传递参数。 据我所知,你必须首先通过 Flutter 构建应用程序,然后使用其他 CLI 来传递工具。

安卓

adb -s $DEVICE_ID shell am start \
  -n $ANDROID_PACKAGE/$ANDROID_ACTIVITY \
  -ez [arg name] [value] \
  -ez [arg name2] [value 2] \
  ...

iOS

$FLUTTER_HOME/bin/cache/artifacts/ios-deploy/ios-deploy --id $DEVICE_ID \
  --bundle build/ios/iphoneos/Runner.app \
  --debug \
  --args [arg name] [arg value] [arg name2] [arg value2] ...

请务必使用 Flutter 缓存工件中托管的

ios-deploy
版本。 他们一定对该工具与您可以通过 Homebrew 安装的标准工具进行了一些调整,因为我只有在使用 Flutter 的内部版本时才能使事情正常工作。


0
投票

在 Flutter 3.7 之后,我们可以将所有 API 密钥存储在 JSON 文件中,并从命令行将其传递给新的

--dart-define-from-file
标志。

创建一个任意名称的json文件,即

api-keys.json

{
  "API_KEY": "a1b2c33d4e5f6g7h8i9jakblc",
  "STRIPE_PUBLISHABLE_KEY": "pk_test_aposdjpa309u2n230ibt23908g"
}

您可以针对任何

value
获得
key
,如下

const apiKey = String.fromEnvironment('API_KEY');
if (apiKey.isEmpty) {
  throw AssertionError('API_KEY is not set');
}

要使用

json
文件运行应用程序,请运行以下命令

flutter run --dart-define-from-file=api-keys.json

如果需要,您可以使用不同的 API 密钥定义多个启动配置,即

api-keys.dev.json
api-keys.prod.json

如果您使用

VSCode
,您可以在
args
文件中添加
launch.json
,如下所示

{
  "version": "1.0.0",
  "configurations": [
    {
      "name": "Launch",
      "request": "launch",
      "type": "dart",
      "program": "lib/main.dart",
      "args": [
        "--dart-define-from-file",
        "api-keys.dev.json"
      ]
    }
  ]
}

如果您使用

Android Studio
,您可以将此文件作为附加运行参数传递,如下所示

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.