resolveScreenshotDevice function

DeviceInfo resolveScreenshotDevice(
  1. Map<String, dynamic> args
)

Implementation

DeviceInfo resolveScreenshotDevice(Map<String, dynamic> args) {
  final platform = args['platform']?.toString();
  final model = args['model']?.toString();
  final platformKey = normalizeScreenshotDeviceName(platform);
  final candidates = switch (platformKey) {
    'android' => Devices.android.all,
    'ios' || 'iphone' || 'ipad' => Devices.ios.all,
    _ => Devices.all,
  };

  if (model != null && model.trim().isNotEmpty) {
    final modelKey = normalizeScreenshotDeviceName(model);
    for (final device in candidates) {
      if (normalizeScreenshotDeviceName(device.name) == modelKey ||
          normalizeScreenshotDeviceName(device.identifier.name) == modelKey) {
        return device;
      }
    }
    for (final device in candidates) {
      if (normalizeScreenshotDeviceName(device.name).contains(modelKey) ||
          normalizeScreenshotDeviceName(device.identifier.name)
              .contains(modelKey)) {
        return device;
      }
    }
    throw EnsembleTestFailure(
      'Unknown screenshot device model "$model". Available models: '
      '${candidates.map((device) => device.name).join(', ')}',
    );
  }

  if (platformKey == 'android') return Devices.android.all.first;
  return Devices.ios.iPhone15Pro;
}