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

5sxhfpxr  于 2023-03-19  发布在  Flutter
关注(0)|答案(6)|浏览(264)

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

flutter run -device [my custom arg]

因此,我可以使用以下命令访问它:

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

谢谢你。

6mw9ycah

6mw9ycah1#

没有办法做到这一点,因为当您在设备上启动应用程序时,也没有传递任何参数。
如果这是用于开发,则可以将-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 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是必需的,并且变量名区分大小写。

uoifb46i

uoifb46i2#

Android Studio

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

编辑

运行〉编辑配置...

或单击配置下拉选择器

添加

Additional arguments中添加参数(如果没有空格,则可以使用引号)2.根据需要添加描述性名称

副本

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

选择

从下拉菜单中选择您的运行配置

使用

在代码中使用参数
例如:
const String version = String.fromEnvironment('VERSION');

5q4ezhmt

5q4ezhmt3#

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

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

isr3a4wc4#

-dart-define在稳定通道版本1.17中运行
从命令行

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

例如在Main.dart:

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

vc9ivgsu5#

我也有同样的问题,所以我写了一个包和一些说明,可以帮助。
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] \
  ...

操作系统

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

nzkunb0c

nzkunb0c6#

@Janux已经答对了。
我只想举一个简单的例子:

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

相关问题