Prevent calls to view.uiIsolate.flutterExit on devices which do not support it (#26201)
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart index 3c6d378..b7e9666 100644 --- a/packages/flutter_tools/lib/src/device.dart +++ b/packages/flutter_tools/lib/src/device.dart
@@ -184,6 +184,7 @@ } abstract class Device { + Device(this.id); final String id; @@ -276,11 +277,17 @@ /// Whether this device implements support for hot restart. bool get supportsHotRestart => true; + /// Whether flutter applications running on this device can be terminated + /// from the vmservice. + bool get supportsStopApp => true; + + /// Whether the device supports taking screenshots of a running flutter + /// application. + bool get supportsScreenshot => false; + /// Stop an app package on the current device. Future<bool> stopApp(ApplicationPackage app); - bool get supportsScreenshot => false; - Future<void> takeScreenshot(File outputFile) => Future<void>.error('unimplemented'); @override
diff --git a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart index 2b6d3b8..be89010 100644 --- a/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart +++ b/packages/flutter_tools/lib/src/fuchsia/fuchsia_device.dart
@@ -151,6 +151,9 @@ bool get supportsHotRestart => false; @override + bool get supportsStopApp => false; + + @override final String name; @override
diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index eca61e9..4bd5dd4 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart
@@ -109,6 +109,9 @@ } Future<void> stopApps() async { + if (!device.supportsStopApp) { + return; + } final List<FlutterView> flutterViews = views; if (flutterViews == null || flutterViews.isEmpty) return;
diff --git a/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart b/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart index 2ec75f9..fb192f0 100644 --- a/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart +++ b/packages/flutter_tools/test/fuchsia/fuchsa_device_test.dart
@@ -36,6 +36,15 @@ expect(names.length, 1); expect(names.first, 'lilia-shore-only-last'); }); + + test('default capabilities', () async { + final FuchsiaDevice device = FuchsiaDevice('123'); + + expect(device.supportsHotReload, true); + expect(device.supportsHotRestart, false); + expect(device.supportsStopApp, false); + expect(await device.stopApp(null), false); + }); }); group('displays friendly error when', () {