Reland "Added --dart-flags option to flutter run (#33924)" (#34181)
Reland "Added --dart-flags option to flutter run (#33924)"
This reverts commit 587687eedf81aa83521cca96b8fb65a4adc8dd90.
diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart
index c9c5c71..727e25b 100644
--- a/packages/flutter_tools/lib/src/android/android_device.dart
+++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -491,6 +491,8 @@
cmd.addAll(<String>['--ez', 'start-paused', 'true']);
if (debuggingOptions.disableServiceAuthCodes)
cmd.addAll(<String>['--ez', 'disable-service-auth-codes', 'true']);
+ if (debuggingOptions.dartFlags.isNotEmpty)
+ cmd.addAll(<String>['--es', 'dart-flags', debuggingOptions.dartFlags]);
if (debuggingOptions.useTestFonts)
cmd.addAll(<String>['--ez', 'use-test-fonts', 'true']);
if (debuggingOptions.verboseSystemLogs) {
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart
index 1763364..3fb4bf8 100644
--- a/packages/flutter_tools/lib/src/commands/run.dart
+++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -4,6 +4,8 @@
import 'dart:async';
+import 'package:args/command_runner.dart';
+
import '../base/common.dart';
import '../base/file_system.dart';
import '../base/time.dart';
@@ -130,6 +132,16 @@
defaultsTo: true,
help: 'If necessary, build the app before running.',
)
+ ..addOption('dart-flags',
+ hide: !verboseHelp,
+ help: 'Pass a list of comma separated flags to the Dart instance at '
+ 'application startup. Flags passed through this option must be '
+ 'present on the whitelist defined within the Flutter engine. If '
+ 'a non-whitelisted flag is encountered, the process will be '
+ 'terminated immediately.\n\n'
+ 'This flag is not available on the stable channel and is only '
+ 'applied in debug and profile modes. This option should only '
+ 'be used for experiments and should not be used by typical users.')
..addOption('use-application-binary',
hide: !verboseHelp,
help: 'Specify a pre-built application binary to use when running.',
@@ -294,6 +306,7 @@
buildInfo,
startPaused: argResults['start-paused'],
disableServiceAuthCodes: argResults['disable-service-auth-codes'],
+ dartFlags: argResults['dart-flags'] ?? '',
useTestFonts: argResults['use-test-fonts'],
enableSoftwareRendering: argResults['enable-software-rendering'],
skiaDeterministicRendering: argResults['skia-deterministic-rendering'],
@@ -350,6 +363,11 @@
);
}
+ if (argResults['dart-flags'] != null && FlutterVersion.instance.isStable) {
+ throw UsageException('--dart-flags is not available on the stable '
+ 'channel.', null);
+ }
+
for (Device device in devices) {
if (await device.isLocalEmulator) {
if (await device.supportsHardwareRendering) {
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index 394befb..3947ce3 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -377,6 +377,7 @@
this.buildInfo, {
this.startPaused = false,
this.disableServiceAuthCodes = false,
+ this.dartFlags = '',
this.enableSoftwareRendering = false,
this.skiaDeterministicRendering = false,
this.traceSkia = false,
@@ -391,6 +392,7 @@
: debuggingEnabled = false,
useTestFonts = false,
startPaused = false,
+ dartFlags = '',
disableServiceAuthCodes = false,
enableSoftwareRendering = false,
skiaDeterministicRendering = false,
@@ -404,6 +406,7 @@
final BuildInfo buildInfo;
final bool startPaused;
+ final String dartFlags;
final bool disableServiceAuthCodes;
final bool enableSoftwareRendering;
final bool skiaDeterministicRendering;
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 02ede71..15f2a2e 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -283,6 +283,11 @@
if (debuggingOptions.disableServiceAuthCodes)
launchArguments.add('--disable-service-auth-codes');
+ if (debuggingOptions.dartFlags.isNotEmpty) {
+ final String dartFlags = debuggingOptions.dartFlags;
+ launchArguments.add('--dart-flags="$dartFlags"');
+ }
+
if (debuggingOptions.useTestFonts)
launchArguments.add('--use-test-fonts');