将对象列表与地图Dart中的信息结合起来

时间:2018-12-12 12:26:08

标签: loops foreach dart flutter

我试图将通过http调用收到的地图中的信息添加到Dart中的对象列表。例如,对象列表是具有toollocation属性的Tools:

Tool(
      {this.make,
      this.model,
      this.description,
      this.tooltype,
      this.toollocation,
      this.paymenttype,
      this.userid});

我还使用Google距离矩阵api来收集该工具与用户的距离。

Future<DistanceMatrix> fetchDistances() async {
    await getlocation();
    latlongdetails = position['latitude'].toString() +
        ',' +
        position['longitude'].toString();
    print(latlongdetails);
    print('still running');
    final apiresponsepc = await http
        .get(
            'https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=$latlongdetails&destinations=$postcodes&key=xxx');
    distanceMatrix =
        new DistanceMatrix.fromJson(json.decode(apiresponsepc.body));
    return distanceMatrix;
  }

过去我一直在做的事情是称呼未来,一旦我返回了该工具的原始结果,就获得了距离。但是,我希望能够按距离对工具结果进行排序,因此我需要遍历列表中的每个工具并为每个工具添加距离。

到目前为止,我一直在工具列表上尝试foreach循环:

finalresults.forEach((tool){ tool.toollocation = distanceMatrix.elements[0].distance.text;});

,但是很明显,这只会将第一个距离测量值添加到每个工具中。

有什么方法可以迭代每个工具,然后再添加距离矩阵图的距离?每个距离将与列表中的每个工具顺序排列。

2 个答案:

答案 0 :(得分:0)

我认为这就是你想要做的

finalResults.forEach((tool) {
  distanceMatrix.elements.forEach((element){
    tool.toolLocation = element.distance.text;
  });
});

如果elements也是List,则可以使用foreach语法对其进行迭代。

答案 1 :(得分:0)

我已使用以下代码解决了这个问题:

int number = 0;
    finalresults.forEach((tool) {
      tool.toollocation = distanceMatrix.elements[number].distance.text;
      number = number + 1;
    });