我正在尝试使用 Dart 2.7.0 SDK 通过浏览器中的 Web 应用程序从输入源捕获音频。我希望能够识别系统上可用的音频源,以便用户可以从中进行选择(而不是完全依赖默认源):
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
}
上面的代码行编译成功,但无论是否处于调试模式,都会在 Webstorm 2019.3.1 中的 Webdev 提供的 Chrome 79.0.3945.88 中生成错误(注意: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 文档基本上不存在,并且考虑到 Dart 和 JS API 的变化,我不确定这个问题的解决方案是什么。