作为一项实验,我用dart和easyrtc尝试了一些东西。我开始将this(通常通过nodejs服务器,发现here)移植到dart版本,这就是我用它制作的
编辑:我发现代码的哪一部分导致了错误。它是for循环无法运行的数据对象代理。通常,setRoomOccupantListener函数提供房间名称和一个对象,其中所有对等体都连接到房间。我在普通的javascript中制作了对象布局的截图,就像我在chrome中调试时看到的here。
function connect() {
easyrtc.setRoomOccupantListener(convertListToButtons);
}
function convertListToButtons (roomName, data, isPrimary) {
clearConnectList();
var otherClientDiv = document.getElementById("otherClients");
for(var easyrtcid in data) {
var button = document.createElement("button");
button.onclick = function(easyrtcid) {
return function() {
performCall(easyrtcid);
};
}(easyrtcid);
var label = document.createTextNode(easyrtc.idToName(easyrtcid));
button.appendChild(label);
otherClientDiv.appendChild(button);
}
}
here是我调试chrome中的dart代码时的屏幕截图
void connect() {
easyrtc.setRoomOccupantListener(convertListToButtons);
}
void convertListToButtons(roomName, data, isPrimary) {
clearConnectList();
var otherClientDiv = querySelector("#otherClients");
for (var easyrtcid in data) {
var button = document.createElement("button");
button.onClick.listen((event) {
performCall(easyrtcid);
});
button.appendText(easyrtc.idToName(easyrtcid));
otherClientDiv.append(button);
}
}
这是我得到的错误:
Class 'Proxy' has no instance getter 'iterator'.
NoSuchMethodError: method not found: 'iterator' Receiver: Instance of 'Proxy' Arguments: []
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:45)
#1 P...<omitted>...7)
我在这里遗漏了一些简单的东西,还是这种不相容的东西?谢谢。
答案 0 :(得分:1)
我看到你也可以使用import package:js/js.dart';
。我不知道如何使用
你可以尝试
import 'dart:js' as js;
https://www.dartlang.org/articles/js-dart-interop/
这看起来很奇怪
easyrtc = js.context.easyrtc; // <== here you have context 'easyrtc'
easyrtc.easyApp('easyrtc.audioVideo', 'selfVideo', new js.JsObject.jsify(['callerVideo']), loginSuccess, loginFailure);
// and here again 'easyrtc.audioVideo', I guess this is one to much
试
easyrtc.easyApp.callMethod('audioVideo', ['selfVideo', js.JsObject.jsify(['callerVideo']), loginSuccess, loginFailure]);
其中'audioVideo'是被调用的方法,其余是参数
easyrtc.callMethod('easyApp', ['audioVideo', 'selfVideo', js.JsObject.jsify(['callerVideo']), loginSuccess, loginFailure]);
其中'easyApp'是被调用的方法,其余的是参数。
如果您可以添加代码在JavaScript中的外观,我可以创建更好的示例。
答案 1 :(得分:1)
赞dart:js
package:js不直接处理Dart列表。所以以下一行:
easyrtc.easyApp('easyrtc.audioVideo', 'selfVideo',
['callerVideo'], loginSuccess, loginFailure);
应该是:
easyrtc.easyApp('easyrtc.audioVideo', 'selfVideo',
js.array(['callerVideo']), loginSuccess, loginFailure);