getAvailableAudioOutputs method

  1. @override
Future<List<AudioOutputDevice>> getAvailableAudioOutputs()
override

Gets the list of available audio output devices.

Implementation

@override
Future<List<AudioOutputDevice>> getAvailableAudioOutputs() async {
  final List<AudioOutputDevice> devices = [];
  try {
    final mediaDevices = web.window.navigator.mediaDevices;
    final jsDevices = await mediaDevices.enumerateDevices().toDart;
    final count = jsDevices.length;
    for (var i = 0; i < count; i++) {
      final device = jsDevices[i];
      if (device.kind == 'audiooutput') {
        final id = device.deviceId;
        final label = device.label.isNotEmpty
            ? device.label
            : 'Audio Output ${devices.length + 1}';
        devices.add(
          AudioOutputDevice(
            id: id,
            name: label,
            type: AudioOutputType.speaker,
            isSelected: devices.isEmpty,
          ),
        );
      }
    }
  } catch (_) {}

  if (devices.isEmpty) {
    devices.add(
      const AudioOutputDevice(
        id: 'default',
        name: 'Default Audio Output',
        type: AudioOutputType.speaker,
        isSelected: true,
      ),
    );
  }

  return devices;
}