6

我正在尝试学习来自服务器端 Java EE 世界的客户端 Dart,并且在将数组从现有 JavaScript 库转换为 Dart 列表时遇到了麻烦。

我正在尝试通过构建使用 Google Maps的 Javascript Interop 示例来学习。在 Google 的Maps API 文档中,DirectionsLeg对象的step属性返回。

DirectionsSteps 数组,其中每个都包含有关此腿中各个步骤的信息

如何将其转换var为飞镖列表?我尝试了以下方法:

final List<maps.DirectionsStep> steps = List.from(directionsLeg.steps);

但 Dart Editor 告诉我cannot resolve method 'from' in class 'List'。我的进口是:

import 'dart:html';
import 'dart:core';
import 'package:js/js.dart' as js;

我究竟做错了什么?甚至有可能还是我必须接受使用 a var

4

1 回答 1

8

目前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
}

如果你真的想使用 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;
}

关于您的代码:

  • 您不能定义List<maps.DirectionsStep>:maps.DirectionsStep不是类型,它是js.Proxyjs 上的google.maps.DirectionsStep(而且它实际上并不存在 - 只有一个容器 js 对象{})。
  • List.from(...): 在这里,你尝试调用一个名为fromDartList对象的静态方法。这就是为什么你得到你的错误。List.from实际上是一个名为构造函数的工厂,必须与new关键字 ( new List.from(otherIterable)) 一起使用。
于 2012-11-28T07:18:41.150 回答