首页 > 解决方案 > mediaDevices.enumerateDevices() 在浏览器中生成运行时错误

问题描述

我正在尝试使用 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 的变化,我不确定这个问题的解决方案是什么。

标签: dartweb-audio-apimediadevices

解决方案


这似乎是 Dart SDK 中的一个错误。请参阅 Dart SDK 问题列表中的错误39627。修复程序正在开发过程中进行。


推荐阅读