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

Cannot Populate Google Map With Filtered Markers In Flutter

我正在尝试从 firebase 中过滤我的位置列表,按与用户位置的相对距离进行过滤。然后将位置标记添加到 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;
    }
  }

让我知道哪里做错了。

我在这里为更新后可能需要它的所有人解决了这个问题:

地图标记 = {};

然后使用了方法:

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;
    }
  }

并作为我的值入图映射:

标记:Set.of(markers.values)