blob: 635b6dafac2733ba68753153ef1a6d39eb24d04e [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:convert';
import 'dart:io';
String getFlutterCommand() => Platform.isWindows ? 'flutter.bat' : 'flutter';
/// Returns the first device listed by `flutter devices` that targets
/// [platform], or null if there is no such device.
Future<String?> getDeviceForPlatform(String platform) async {
final ProcessResult result = await Process.run(
getFlutterCommand(),
<String>['devices', '--machine'],
stdoutEncoding: utf8,
);
if (result.exitCode != 0) {
return null;
}
String output = result.stdout as String;
// --machine doesn't currently prevent the tool from printing banners;
// see https://github.com/flutter/flutter/issues/86055. This workaround
// can be removed once that is fixed.
output = output.substring(output.indexOf('['));
final List<Map<String, dynamic>> devices =
(jsonDecode(output) as List<dynamic>).cast<Map<String, dynamic>>();
for (final Map<String, dynamic> deviceInfo in devices) {
final String targetPlatform =
(deviceInfo['targetPlatform'] as String?) ?? '';
if (targetPlatform.startsWith(platform)) {
final String? deviceId = deviceInfo['id'] as String?;
if (deviceId != null) {
return deviceId;
}
}
}
return null;
}