diff --git a/packages/flutter_tools/lib/src/web/web_device.dart b/packages/flutter_tools/lib/src/web/web_device.dart index c0f851a2dec..e981e1c04c0 100644 --- a/packages/flutter_tools/lib/src/web/web_device.dart +++ b/packages/flutter_tools/lib/src/web/web_device.dart @@ -89,7 +89,10 @@ class ChromeDevice extends Device { DevicePortForwarder get portForwarder => const NoOpDevicePortForwarder(); @override - Future get sdkNameAndVersion async { + Future get sdkNameAndVersion async => _sdkNameAndVersion ??= await _computeSdkNameAndVersion(); + + String _sdkNameAndVersion; + Future _computeSdkNameAndVersion() async { if (!isSupported()) { return 'unknown'; } diff --git a/packages/flutter_tools/test/general.shard/web/devices_test.dart b/packages/flutter_tools/test/general.shard/web/devices_test.dart index e568fbf924f..b248d567b14 100644 --- a/packages/flutter_tools/test/general.shard/web/devices_test.dart +++ b/packages/flutter_tools/test/general.shard/web/devices_test.dart @@ -101,6 +101,10 @@ void main() { expect(chromeDevice.isSupported(), true); expect(await chromeDevice.sdkNameAndVersion, 'ABC'); + + // Verify caching works correctly. + expect(await chromeDevice.sdkNameAndVersion, 'ABC'); + verify(mockProcessManager.run(['chrome.foo', '--version'])).called(1); }, overrides: { Platform: () => mockPlatform, ProcessManager: () => mockProcessManager,