Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart mediaDevices.enumerateDevices()在浏览器中生成运行时错误_Dart_Web Audio Api_Mediadevices - Fatal编程技术网

Dart mediaDevices.enumerateDevices()在浏览器中生成运行时错误

Dart mediaDevices.enumerateDevices()在浏览器中生成运行时错误,dart,web-audio-api,mediadevices,Dart,Web Audio Api,Mediadevices,我正在尝试使用Dart 2.7.0 SDK通过浏览器中的web应用程序从输入源捕获音频。我希望能够识别系统上可用的音频源,以便用户可以从中进行选择(而不是完全依赖默认源): captureAudio()异步{ List sources=wait window.navigator.mediaDevices.enumerateDevices(); //在这里做更多的事情 //请注意,列出的媒体API之间存在许多差异 //用于Dart和MDN上显示的JavaScript API。这些差异可能存在,也可

我正在尝试使用Dart 2.7.0 SDK通过浏览器中的web应用程序从输入源捕获音频。我希望能够识别系统上可用的音频源,以便用户可以从中进行选择(而不是完全依赖默认源):

captureAudio()异步{
List sources=wait window.navigator.mediaDevices.enumerateDevices();
//在这里做更多的事情
//请注意,列出的媒体API之间存在许多差异
//用于Dart和MDN上显示的JavaScript API。这些差异可能存在,也可能不存在
//对这个错误有任何影响吗
}
上述代码行编译成功,但在Webstorm 2019.3.1中Webdev提供的Chrome 79.0.3945.88中生成错误,无论是否处于调试模式(注意:MDN显示相应的JS方法调用应在Chrome中工作):

Uncaught(in promise)错误:类型“List”应为“List”,以实现预期的类型“FutureOr”。
DartError dart_sdk.js:5172
掷镖sdk.js:3880
castError dart_sdk.js:3840
铸造飞镖sdk.js:4159
检查未来或dart sdk.js:27380
(匿名函数)dart_sdk.js:52085
来自Promise.then的异步调用
承诺未来dart_sdk.js:52087
[dartx.enumerateDevices]dart_sdk.js:79203
captureAudio capturewebaudio.dart:51
runBody dart_sdk.js:32202
_异步dart_sdk.js:32230
captureAudio capturewebaudio.dart:50
(匿名函数)capturewebaudio.dart:40
_检查并调用dart_sdk.js:4084
dcall dart_sdk.js:4089
(匿名函数)dart_sdk.js:97072

关于这个主题的Dart文档基本上是不存在的,考虑到Dart和JS API的变化,我不确定这个问题的解决方法。

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

这看起来可能是API中的错误。你应该在Github页面上发布这篇文章。在dartpad中,代码不会给出任何错误,只返回
null
。多亏了你们两位。我在dartpad上尝试了这个方法(顺便说一句,好主意),从我所知道的,enumerateDevices()调用甚至没有正确完成。如果源被初始化为null,那么它将保持为null。如果它被初始化为空列表对象,那么它将保持为空列表对象。我在Chrome和Firefox上都试过dartpad。Safari不支持通过navigator获取mediaDevices对象(据我所知,这是一种不推荐的方法),因此我无法在dartpad上有效地尝试该浏览器。我想我会提交一份bug报告,看看会发生什么。谢谢
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