我正在尝试学习客户端Dart,它来自服务器端Java EE世界,我无法将数组从现有的JavaScript库转换为Dart List.
我试图通过构建使用谷歌地图的Javascript Interop示例来学习.在Google的Maps API文档中,DirectionsLeg对象的step属性返回.
DirectionsSteps数组,每个包含有关此段中各个步骤的信息
如何将其var转换为Dart列表?我尝试过以下方法:
final List<maps.DirectionsStep> steps = List.from(directionsLeg.steps);
Run Code Online (Sandbox Code Playgroud)
但达特编辑告诉我cannot resolve method 'from' in class 'List'.我的进口是:
import 'dart:html';
import 'dart:core';
import 'package:js/js.dart' as js;
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?它是否可能或者我必须接受使用var?
js-interop中没有内置方式现在在返回Listjs时使用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
}
Run Code Online (Sandbox Code Playgroud)
如果你真的想要使用Dart,List你可以将js.Proxyjs Array转换为Dart 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;
}
Run Code Online (Sandbox Code Playgroud)
关于你的代码:
List<maps.DirectionsStep>:maps.DirectionsStep不是一个类型,它是一个js.Proxyjs google.maps.DirectionsStep(而且它不存在 - 只有一个容器js对象{}).List.from(...):在这里,您尝试调用from在Dart List对象上命名的静态方法.这就是你得到错误的原因.List.from实际上是一个名为构造函数的工厂,必须与new关键字(new List.from(otherIterable))一起使用.