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

How do you pass arguments from command line to main in Flutter/Dart?

您如何 运行 命令并使用 Flutter/Dart 传递一些自定义参数,以便随后可以在 main() 调用中访问它们,例如:

flutter run -device [my custom arg]

然后我可以通过以下方式访问它:

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

谢谢。

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

如果这是为了开发,你可以将-t lib/my_alternate_main.dart传递给 flutter run 轻松切换不同设置
每个备用入口点文件使用不同参数或不同初始化的全局变量调用相同的应用程序代码。

更新

为了

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

为此添加了 --dart-define=... 命令行参数。

Additional key-value pairs that will be available as constants from the String.fromEnvironment, bool.fromEnvironment, int.fromEnvironment, and double.fromEnvironment constructors.

有关详细信息,请参阅 Flutter 1.17 no more Flavors, no more iOS Schemas. Command argument that changes everything

例子

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

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

-dart-define 在稳定版 1.17 中工作

来自命令行

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

例如 main.dart:

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

Android工作室

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


编辑

运行 > 编辑配置...

或 单击配置 drop-down 选择器

添加

Additional arguments 中添加您的参数(如果没有空格,引号可选) 2. 可以加个描述性的名字

复制

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

Select

Select 您的 运行 配置来自下拉列表

使用

在代码中使用你的参数

例如

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

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

https://pub.dev/packages/launch_args

我不知道通过 flutter 命令传递参数的方法。据我所知,您必须先通过 Flutter 构建应用程序,然后使用其他 CLI 来传递这些工具。

Android

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 的内部版本时才能正常工作。

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

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