web-dev-qa-db-fra.com

Flutter / Dart Ajouter des événements tactiles personnalisés pour le marqueur Google Maps

Comment ajouter un gestionnaire personnalisé pour les événements tactiles pour le marqueur Google Maps (google_maps_flutter)? Je ne vois que consumeTapEvents qui ne prend en fait aucune fonction mais seulement bool. J'ai pensé à utiliser GestureDetector mais ne me semble pas tout à fait juste.

Quelle est la manière standard de gérer les événements sur les marqueurs de Google Map? J'essaie de naviguer vers une nouvelle page en cliquant.

Merci

6
Jesse
     void _onMapCreated(GoogleMapController controller){
    this._controller = controller;
    controller.onMarkerTapped.add(_onMarkerTapped);
}

void _onMarkerTapped(Marker marker) {
...
}

Widget build(BuildContext context) {
 ... GoogleMap(
        onMapCreated: _onMapCreated,
        options: GoogleMapOptions(
          ...
        ));
}
2
Ji Jo

Vous pouvez utiliser l'option onTap ou onLongPress dans le plugin de carte pour surveiller les événements de tap. Ensuite, vous pouvez ajouter le marqueur de la manière suivante sur la position tapée

    final Set<Marker> _markers = {};



 GoogleMap(onMapCreated: _onMapCreated,
        initialCameraPosition: CameraPosition(
          target: _center,
          zoom: 13.0,
        ),
        compassEnabled: true,
        tiltGesturesEnabled: false,
        onTap: (latlang){
          if(_markers.length>=1)
            {
              _markers.clear();
            }

          _onAddMarkerButtonPressed(latlang);
        },
        myLocationEnabled: true,
        myLocationButtonEnabled: true,
        mapType: mapType,
        markers: _markers,
        onCameraMove: _onCameraMove,
      ),

où la fonction _onAddMarkerButtonPressed est

 void _onAddMarkerButtonPressed(LatLng latlang) {
loadAddress(latlang);
_latLng = latlang;
 setState(() {
  _markers.add(Marker(
    // This marker id can be anything that uniquely identifies each marker.
    markerId: MarkerId(_lastMapPosition.toString()),
    position: latlang,
    infoWindow: InfoWindow(
      title: address,
    //  snippet: '5 Star Rating',
    ),
    icon: BitmapDescriptor.defaultMarker,
  ));
});
}
1
Sarthak Singhal

Gardez à l'esprit que la version actuelle est un aperçu développeur à la version 0.0.3. Donnez-lui un peu de temps pour faire fonctionner les choses, s'il vous plaît!

1
Randal Schwartz

Vous pouvez faire quelque chose comme

_mapController.onMarkerTapped.add((marker) {
      // your code here
    });

_mapController est une instance de GoogleMapController :)

0
Gabriel

Créez un objet personnalisé lorsque vous créez des marqueurs.

var map = <String, String> {}; // custom object

for (int i = 0; i < mCrag.length; i++) {
    controller.addMarker(new MarkerOptions(
       icon: BitmapDescriptor.fromAsset('assets/images/down-arrow.png'),
       position: LatLng(double.parse(mCrag[i].lat), double.parse(mCrag[i].lon)),
    )).then((marker) {
         map[marker.id] = mCrag[i].id; // this will return when tap on marker
         return marker;
    });
}

// marker click event
void onMarkerTapped(Marker marker) {
   var selectedMarker = map[marker.id];  // here you will get your id.
   debugPrint(selectedMarker);
   getRoutes(selectedMarker);
}
0
Sagar Chavada