Flutter:如何在 gradle 脚本中使用 dart-define 变量

Kri*_* CN 3 flutter flutter-integration-test

在为 flutter 应用程序创建集成测试时,如何dart-define通过 gradle 脚本传递变量。

从Flutter文档来看,为了构建一个仪器测试apk(然后将其上传到Firebase测试实验室并进行测试),我们需要直接使用gradlew这样的命令:

pushd android
flutter build apk
./gradlew app:assembleAndroidTest
./gradlew app:assembleDebug -Ptarget=integration_test/<name>_test.dart
popd

Run Code Online (Sandbox Code Playgroud)

这里没有指定如何将--dart-define我们正在使用的标志内容从 flutter 端传递flutter rungradlew命令。

Kri*_* CN 7

Flutterdart-define标志被编码为 base64,并作为带有参数 name 的逗号分隔字段传递给 gradle -Pdart-defines。所以我们可以利用它来手动传递dart-define变量

考虑一下你的 dart-define 标志是environment=staging

然后在正常的 flutter 运行中,您将像这样使用它。

flutter run --dart-define environment=staging
Run Code Online (Sandbox Code Playgroud)

要通过命令传递此信息gradlew,请将其转换为 Base64 编码的字符串并按如下所示传递。

Base64 编码的字符串environment=stagingZW52aXJvbm1lbnQ9c3RhZ2luZw==

所以使用

./gradlew app:assembleDebug -Ptarget=integration_test/<name>_test.dart -Pdart-defines="ZW52aXJvbm1lbnQ9c3RhZ2luZw=="
Run Code Online (Sandbox Code Playgroud)

如果您有多个 dart 定义,请添加它们并用逗号分隔。(请注意,该标志是 -Pdart-defines - (定义s澄清了它))

./gradlew app:assembleDebug -Ptarget=integration_test/<name>_test.dart -Pdart-defines="ZW52aXJvbm1lbnQ9c3RhZ2luZw==,ZW1haWw9bXllbWFpbEBlbWFpbC5jb20="
Run Code Online (Sandbox Code Playgroud)