Dasun Nirmitha
Dasun Nirmitha

Reputation: 458

Get Visible Markers in google_maps_flutter

Using Google Maps for Flutter I've placed some markers on different places on the map. I have a separate RaisedButton on my Flutter app which I need to only be visible when one or more of those markers are currently visible on the map.

How can this be achieved? I've found a somewhat similar solution for Google Maps API but I need this for google_maps_flutter on Flutter.

Upvotes: 5

Views: 1944

Answers (2)

Aziz Kaukawala
Aziz Kaukawala

Reputation: 340

LatLngBounds has specific method known as contains() which works along with GoogleMapController's getVisibleRegion().

From the official docs:

contains(LatLng point) → bool
Returns whether this rectangle contains the given LatLng.

Usage:

Completer<GoogleMapController> _controller = Completer();

static final CameraPosition _positionCenter = CameraPosition(
    target: LatLng(40.730610, -73.935242),
    zoom: 3.5,
);

Future<LatLngBounds> _getVisibleRegion() async {
    final GoogleMapController controller = await _controller.future;
    final LatLngBounds bounds = await controller.getVisibleRegion();
    return bounds;
}

@override
Widget build(BuildContext context) {
    void checkMarkers() async {
        LatLngBounds bounds = await _getVisibleRegion();
        Set<Marker> markers = Set<Marker>.of(markers.values);

        markers.forEach((marker) {
            print('Position: ${ marker.position } - Contains: ${ bounds.contains(marker.position) }');
        });
    }

    return GoogleMap(
        mapType: MapType.normal,
        markers: Set<Marker>.of(markers.values),
        initialCameraPosition: _positionCenter,
        onCameraIdle: () {
            checkMarkers();
        },
        onMapCreated: (GoogleMapController controller) async {
            _controller.complete(controller);
            checkMarkers();
        },
    );
}

Upvotes: 6

Randal Schwartz
Randal Schwartz

Reputation: 44176

google_maps_flutter is a developer preview at version 0.0.3. Please hang in there a bit until more functionality is introduced.

Upvotes: 0

Related Questions