getDeviceList method

  1. @override
Future<List<String>> getDeviceList()
override

Lists available video capture devices.

Implementation

@override
Future<List<String>> getDeviceList() async {
  // Device labels are only populated once permission has been granted, so
  // briefly acquire a stream first (the same approach camera_web uses),
  // then stop every track immediately.
  await _requestTemporaryStream();

  final devices =
      (await dom.window.navigator.mediaDevices.enumerateDevices().toDart)
          .toDart;
  _videoDevices
    ..clear()
    ..addAll(devices.where(
        (device) => device.kind == 'videoinput' && device.deviceId.isNotEmpty));

  final names = <String>[];
  for (var i = 0; i < _videoDevices.length; i++) {
    final label = _videoDevices[i].label;
    names.add(label.isNotEmpty ? label : 'Camera $i');
  }
  return names;
}