Fix getDevicesById() (#9646) If the user specified a non-exact device id, it was producing an exception whereby we were trying to listen to the `getAllConnectedDevies()` stream twice.
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart index 7ba2299..b356690 100644 --- a/packages/flutter_tools/lib/src/device.dart +++ b/packages/flutter_tools/lib/src/device.dart
@@ -53,7 +53,7 @@ bool get hasSpecifiedAllDevices => _specifiedDeviceId == 'all'; Stream<Device> getDevicesById(String deviceId) async* { - final Stream<Device> devices = getAllConnectedDevices(); + final List<Device> devices = await getAllConnectedDevices().toList(); deviceId = deviceId.toLowerCase(); bool exactlyMatchesDeviceId(Device device) => device.id.toLowerCase() == deviceId || @@ -62,15 +62,15 @@ device.id.toLowerCase().startsWith(deviceId) || device.name.toLowerCase().startsWith(deviceId); - final Device exactMatch = await devices.firstWhere( - exactlyMatchesDeviceId, defaultValue: () => null); + final Device exactMatch = devices.firstWhere( + exactlyMatchesDeviceId, orElse: () => null); if (exactMatch != null) { yield exactMatch; return; } // Match on a id or name starting with [deviceId]. - await for (Device device in devices.where(startsWithDeviceId)) + for (Device device in devices.where(startsWithDeviceId)) yield device; }