Dart mediaDevices.enumerateDevices()在浏览器中生成运行时错误
我正在尝试使用Dart 2.7.0 SDK通过浏览器中的web应用程序从输入源捕获音频。我希望能够识别系统上可用的音频源,以便用户可以从中进行选择(而不是完全依赖默认源):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。这些差异可能存在,也可
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