Я пытаюсь захватить звук с источника входного сигнала через веб-приложение в браузере, используя Dart 2.7.0 SDK. Я хочу иметь возможность идентифицировать доступные аудиоисточники в системе, чтобы пользователь мог выбирать среди них (а не полагаться исключительно на источник по умолчанию):
captureAudio() async{
List<MediaDeviceInfo> sources = await window.navigator.mediaDevices.enumerateDevices();
// Do more stuff here
// Note that there are numerous differences in media APIs between those listed
// for Dart and the JavaScript APIs shown on MDN. Those differences may or may not
// have any effect on this error
}
Строка кода выше компилируется успешно, но генерирует ошибку в Chrome 79.0.3945.88, обслуживаемую из Webdev в Webstorm 2019.3.1, в режиме отладки или нет (примечание: MDN показывает, что соответствующий вызов метода JS должен работать в Chrome):
Uncaught (in promise) Error: Type 'List<dynamic>' should be 'List<MediaDeviceInfo>' to implement expected type 'FutureOr<List<MediaDeviceInfo>>'.
DartError dart_sdk.js:5172
throw_ dart_sdk.js:3880
castError dart_sdk.js:3840
cast dart_sdk.js:4159
check_FutureOr dart_sdk.js:27380
(anonymous function) dart_sdk.js:52085
Async call from Promise.then
promiseToFuture dart_sdk.js:52087
[dartx.enumerateDevices] dart_sdk.js:79203
captureAudio capturewebaudio.dart:51
runBody dart_sdk.js:32202
_async dart_sdk.js:32230
captureAudio capturewebaudio.dart:50
(anonymous function) capturewebaudio.dart:40
_checkAndCall dart_sdk.js:4084
dcall dart_sdk.js:4089
(anonymous function) dart_sdk.js:97072
Документация по Dart для этой топики c по существу не существует, и, учитывая различия в API-интерфейсах Dart и JS, я не уверен, каково разрешение этой проблемы.