我正在尝试学习客户端Dart,它来自服务器端Java EE世界,我无法将数组从现有的JavaScript库转换为Dart List。
我试图通过构建uses Google Maps的Javascript Interop示例来学习。在Google Maps API's documentation中,DirectionsLeg
对象的step
属性返回。
DirectionsSteps数组,每个都包含有关此段中各个步骤的信息
如何将此var
转换为Dart列表?我尝试过以下方法:
final List<maps.DirectionsStep> steps = List.from(directionsLeg.steps);
但Dart编辑告诉我cannot resolve method 'from' in class 'List'
。我的进口是:
import 'dart:html';
import 'dart:core';
import 'package:js/js.dart' as js;
我做错了什么?是偶数还是我必须接受使用var
?
答案 0 :(得分:7)
现在js-interop没有内置方法可以在返回js List
时使用Dart Array
。
directionsLeg.steps
会返回js.Proxy
,其处理方式与js Array
相同。您可以像这样迭代它:
final steps = directionsLeg.steps;
for (var i = 0; i < steps.length ; i++) {
final step = steps[i];
// do the job with step
}
如果您真的想使用飞镖List
,可以将js.Proxy
js Array
转换为飞镖List
,例如:
List<js.Proxy> convertToList(js.Proxy arrayProxy){
final result = new List<js.Proxy>();
for (var i = 0; i < arrayProxy.length ; i++) {
result.add(arrayProxy[i]);
}
return result;
}
关于您的代码:
List<maps.DirectionsStep>
:maps.DirectionsStep
不是类型,它是js js.Proxy
上的google.maps.DirectionsStep
(此外它并不存在 - 只有一个容器js object {}
)。List.from(...)
:在这里,您尝试在Dart from
对象上调用名为List
的静态方法。这就是你得到错误的原因。 List.from
实际上是一个工厂named constructor,必须与new
关键字(new List.from(otherIterable)
)一起使用。