Add flag to enable expression evaluation for web (#55003)
* Add flag to enable expression evaluation for web
Added flag --web-enable-expression-evaluation to flutter run commmand
that enables expression evaluation from IDEs for web target. Disabled
by default.
Helps https://github.com/flutter/flutter/issues/54520
* Update packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart
Co-Authored-By: Jonah Williams <jonahwilliams@google.com>
Co-authored-by: Jonah Williams <jonahwilliams@google.com>
diff --git a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart
index 777a67e..d53b01c 100644
--- a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart
+++ b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart
@@ -418,6 +418,11 @@
directory: globals.fs.path.join(Cache.flutterRoot, 'packages', 'flutter_tools')
);
+ final ExpressionCompiler expressionCompiler =
+ debuggingOptions.webEnableExpressionEvaluation
+ ? WebExpressionCompiler(device.generator)
+ : null;
+
device.devFS = WebDevFS(
hostname: effectiveHostname,
port: hostPort,
@@ -427,7 +432,7 @@
buildMode: debuggingOptions.buildInfo.mode,
enableDwds: _enableDwds,
entrypoint: globals.fs.file(target).uri,
- expressionCompiler: WebExpressionCompiler(device.generator),
+ expressionCompiler: expressionCompiler,
);
final Uri url = await device.devFS.create();
if (debuggingOptions.buildInfo.isDebug) {
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart
index 077e507..01b48a8 100644
--- a/packages/flutter_tools/lib/src/commands/run.dart
+++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -382,6 +382,7 @@
webEnableExposeUrl: featureFlags.isWebEnabled && boolArg('web-allow-expose-url'),
webRunHeadless: featureFlags.isWebEnabled && boolArg('web-run-headless'),
webBrowserDebugPort: browserDebugPort,
+ webEnableExpressionEvaluation: featureFlags.isWebEnabled && boolArg('web-enable-expression-evaluation'),
vmserviceOutFile: stringArg('vmservice-out-file'),
// Allow forcing fast-start to off to prevent doing more work on devices that
// don't support it.
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index 7240b6f..3286a17 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -610,6 +610,7 @@
this.webUseSseForDebugProxy = true,
this.webRunHeadless = false,
this.webBrowserDebugPort,
+ this.webEnableExpressionEvaluation = false,
this.vmserviceOutFile,
this.fastStart = false,
}) : debuggingEnabled = true;
@@ -639,7 +640,8 @@
hostVmServicePort = null,
deviceVmServicePort = null,
vmserviceOutFile = null,
- fastStart = false;
+ fastStart = false,
+ webEnableExpressionEvaluation = false;
final bool debuggingEnabled;
@@ -676,6 +678,9 @@
/// The port the browser should use for its debugging protocol.
final int webBrowserDebugPort;
+ /// Enable expression evaluation for web target
+ final bool webEnableExpressionEvaluation;
+
/// A file where the vmservice URL should be written after the application is started.
final String vmserviceOutFile;
final bool fastStart;
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart
index e6dfe4e..31a9dc9 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -199,6 +199,11 @@
'(https://chromedevtools.github.io/devtools-protocol/).',
hide: true,
);
+ argParser.addFlag('web-enable-expression-evaluation',
+ defaultsTo: false,
+ help: 'Enables expression evaluation in the debugger.',
+ hide: hide,
+ );
}
void usesTargetOption() {
diff --git a/packages/flutter_tools/test/integration.shard/test_driver.dart b/packages/flutter_tools/test/integration.shard/test_driver.dart
index a7d170f..e239ea4 100644
--- a/packages/flutter_tools/test/integration.shard/test_driver.dart
+++ b/packages/flutter_tools/test/integration.shard/test_driver.dart
@@ -448,7 +448,7 @@
'--machine',
'-d',
if (chrome)
- ...<String>['chrome', '--web-run-headless']
+ ...<String>['chrome', '--web-run-headless', '--web-enable-expression-evaluation']
else
'flutter-tester',
],