无法在Flutter中使用过滤的标记填充Google地图

时间:2019-07-27 21:01:58

标签: google-maps flutter google-maps-markers

我正在尝试从火力基地过滤我的位置列表,并按照与用户位置的相对距离进行过滤。然后将位置标记添加到Google地图。但是,它不起作用。

这是我的代码:

我的用户地图:

Widget _userMap(BuildContext context, userLat, userLong) {
    return Container(
        height: MediaQuery.of(context).size.height,
        width: MediaQuery.of(context).size.width,
        child: GoogleMap(
            mapType: MapType.normal,
            initialCameraPosition: currentLocation == null
                ? CameraPosition(
                    target: LatLng(40.748817, -73.985428), zoom: 10, tilt: 45)
                : CameraPosition(
                    target: LatLng(userLat, userLong), zoom: 10, tilt: 45),
            myLocationEnabled: true,
            onMapCreated: onMapCreated,
            markers:
                markers != null ? Set<Marker>.of(markers.values) : markers));
  }

这是我过滤数据的方法:

filterMarker(_userlat, _userlong) {
    for (int i = 0; i < venues.length; ++i) {
      Geolocator()
          .distanceBetween(
              _userLat, _userlong, venues[i].latitude, venues[i].longitude)
          .then((calcDist) {
        if (calcDist / 1000 < 4) {
          placeFilteredMarker(venues[i], calcDist / 1000, venues[i].name,
              venues[i].latitude, venues[i].longitude);
        }
      });
    }
  }

  placeFilteredMarker(venue, distance, name, lat, lng) {
    final int markerCount = venues.length;

    for (int i = 0; i < markerCount; i++) {
      final String markerIdVal = 'marker_id_$markerCount';

      final MarkerId markerId = MarkerId(markerIdVal);

      // creating a new MARKER
      final Marker marker = Marker(
        markerId: markerId,
        position: LatLng(lat, lng),
        infoWindow: InfoWindow(title: name, snippet: '*'),
        icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueBlue),
      );

      setState(() {
        // adding a new marker to map
        markers[markerId] = marker;
        print(marker.markerId);
      });
      print('marker done');
      return;
    }
  }

让我知道我哪里出了错。

1 个答案:

答案 0 :(得分:0)

我在这里找到了更新后可能需要的所有东西:

地图标记= {};

然后使用该方法:

Future filterMarker(_userlat, _userlong) async {
    int filterCounter = 0;

    for (int i = 0; i < venues.length; ++i) {
      Geolocator()
          .distanceBetween(
              _userLat, _userlong, venues[i].latitude, venues[i].longitude)
          .then((calcDist) {
        if (calcDist / 1000 < 1) {
          filterCounter++;
          placeFilteredMarker(filterCounter, calcDist / 1000, venues[i].name,
              venues[i].latitude, venues[i].longitude);
        }
        print(filterCounter);
    
      });
    }
  }

  placeFilteredMarker(counter, distance, name, lat, lng) {
    final int markerCount = counter;

    for (int i = 0; i < markerCount; i++) {
      final String markerIdVal = 'marker_id_$markerCount';

      final MarkerId markerId = MarkerId(markerIdVal);

      // creating a new MARKER
      final Marker marker = Marker(
        markerId: markerId,
        position: LatLng(lat, lng),
        infoWindow: InfoWindow(title: name, snippet: '*'),
        icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueBlue),
      );

      setState(() {
        markers[markerId] = marker;
        // adding a new marker to map
      });

      return;
    }
  }

并作为我进入地图的值:

markers:Set.of(markers.values)