google-mapsdartflutter

Fix google map marker in center


In my flutter app. I am using google_maps_plugin . The link is https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter . I want to fix the marker in center of map without movable after draging the map. I want it likes http://jsfiddle.net/UuDA6/ In my code i am using MarkerOption for placing the marker.

    MarkerOptions options = new MarkerOptions(   
        alpha: 1.0,
        anchor: Offset(0.5, 1.0),
        consumeTapEvents: false,
        draggable: false,
        flat: false,
        icon: BitmapDescriptor.defaultMarker,
        infoWindowAnchor: Offset(0.5, 0.0),
        infoWindowText: InfoWindowText.noText,
        position: LatLng(17.411439, 78.5486697),
        rotation: 0.0,
        visible: true,
        zIndex: 0.0,
    );

But in the position i want to know how to give the center of map.

If any one have idea about it please share it.


Solution

  • Actually with new update of google_maps_flutter: ^0.4.0 we can achieve above requirement easily.

    This is the demo link.

    Map<MarkerId, Marker> _markers = <MarkerId, Marker>{};
    int _markerIdCounter = 0;
    Completer<GoogleMapController> _mapController = Completer();
    
    Container(
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.height,
        child: GoogleMap(
          markers: Set<Marker>.of(_markers.values),
          onMapCreated: _onMapCreated,
          initialCameraPosition: CameraPosition(
            target: Constants.LOCATION_SRI_LANKA,
            zoom: 12.0,
          ),
          myLocationEnabled: true,
          onCameraMove: (CameraPosition position) {
            if(_markers.length > 0) {
              MarkerId markerId = MarkerId(_markerIdVal());
              Marker marker = _markers[markerId];
              Marker updatedMarker = marker.copyWith(
                positionParam: position.target,
              );
    
              setState(() {
                _markers[markerId] = updatedMarker;
              });
            }
          },
        ),
      )
    
    void _onMapCreated(GoogleMapController controller) async {
      _mapController.complete(controller);
      if ([INITIAL_LOCATION] != null) {
        MarkerId markerId = MarkerId(_markerIdVal());
        LatLng position = [INITIAL_LOCATION];
        Marker marker = Marker(
          markerId: markerId,
          position: position,
          draggable: false,
        );
        setState(() {
          _markers[markerId] = marker;
        });
    
        Future.delayed(Duration(seconds: 1), () async {
          GoogleMapController controller = await _mapController.future;
          controller.animateCamera(
            CameraUpdate.newCameraPosition(
              CameraPosition(
                target: position,
                zoom: 17.0,
              ),
            ),
          );
        });
      }
    }
    
    String _markerIdVal({bool increment = false}) {
      String val = 'marker_id_$_markerIdCounter';
      if (increment) _markerIdCounter++;
      return val;
    }