From 445273f7d53bc0fb49ef9c4bc828ce5a60460bd3 Mon Sep 17 00:00:00 2001 From: Danny Tuppeny Date: Thu, 19 Apr 2018 08:49:40 +0100 Subject: [PATCH] Fix filtering of emulator list `flutter emulators nexus` will now return only those that'd match (eg. same things that `flutter emulators --start nexus` would match). --- .../flutter_tools/lib/src/commands/emulators.dart | 14 ++++++++++---- packages/flutter_tools/lib/src/emulator.dart | 12 ++++++------ packages/flutter_tools/test/emulator_test.dart | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/emulators.dart b/packages/flutter_tools/lib/src/commands/emulators.dart index 569888dd43..129dc80e7e 100644 --- a/packages/flutter_tools/lib/src/commands/emulators.dart +++ b/packages/flutter_tools/lib/src/commands/emulators.dart @@ -37,13 +37,17 @@ class EmulatorsCommand extends FlutterCommand { if (argResults.wasParsed('start')) { await _startEmulator(argResults['start']); } else { - await _listEmulators(); + final String searchText = + argResults.rest != null && argResults.rest.isNotEmpty + ? argResults.rest.first + : null; + await _listEmulators(searchText); } } Future _startEmulator(String id) async { final List emulators = - await emulatorManager.getEmulatorsById(id).toList(); + await emulatorManager.getEmulatorsMatching(id).toList(); if (emulators.isEmpty) { printStatus("No emulator found that matches '$id'."); @@ -55,9 +59,11 @@ class EmulatorsCommand extends FlutterCommand { } } - Future _listEmulators() async { + Future _listEmulators(String searchText) async { final List emulators = - await emulatorManager.getAllAvailableEmulators().toList(); + searchText == null + ? await emulatorManager.getAllAvailableEmulators().toList() + : await emulatorManager.getEmulatorsMatching(searchText).toList(); if (emulators.isEmpty) { printStatus('No emulators available.\n\n' diff --git a/packages/flutter_tools/lib/src/emulator.dart b/packages/flutter_tools/lib/src/emulator.dart index b936f06b13..136b8b46ea 100644 --- a/packages/flutter_tools/lib/src/emulator.dart +++ b/packages/flutter_tools/lib/src/emulator.dart @@ -24,15 +24,15 @@ class EmulatorManager { final List _emulatorDiscoverers = []; - Stream getEmulatorsById(String emulatorId) async* { + Stream getEmulatorsMatching(String searchText) async* { final List emulators = await getAllAvailableEmulators().toList(); - emulatorId = emulatorId.toLowerCase(); + searchText = searchText.toLowerCase(); bool exactlyMatchesEmulatorId(Emulator emulator) => - emulator.id?.toLowerCase() == emulatorId || - emulator.name?.toLowerCase() == emulatorId; + emulator.id?.toLowerCase() == searchText || + emulator.name?.toLowerCase() == searchText; bool startsWithEmulatorId(Emulator emulator) => - emulator.id?.toLowerCase()?.startsWith(emulatorId) == true || - emulator.name?.toLowerCase()?.startsWith(emulatorId) == true; + emulator.id?.toLowerCase()?.startsWith(searchText) == true || + emulator.name?.toLowerCase()?.startsWith(searchText) == true; final Emulator exactMatch = emulators.firstWhere( exactlyMatchesEmulatorId, orElse: () => null); diff --git a/packages/flutter_tools/test/emulator_test.dart b/packages/flutter_tools/test/emulator_test.dart index e8b70ef397..b08d5e7c77 100644 --- a/packages/flutter_tools/test/emulator_test.dart +++ b/packages/flutter_tools/test/emulator_test.dart @@ -26,7 +26,7 @@ void main() { final EmulatorManager emulatorManager = new TestEmulatorManager(emulators); Future expectEmulator(String id, List expected) async { - expect(await emulatorManager.getEmulatorsById(id).toList(), expected); + expect(await emulatorManager.getEmulatorsMatching(id).toList(), expected); } expectEmulator('Nexus_5', [emulator1]); expectEmulator('Nexus_5X', [emulator2]);