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
void _onMapCreated(GoogleMapController controller){
this._controller = controller;
controller.onMarkerTapped.add(_onMarkerTapped);
}
void _onMarkerTapped(Marker marker) {
...
}
Widget build(BuildContext context) {
... GoogleMap(
onMapCreated: _onMapCreated,
options: GoogleMapOptions(
...
));
}
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,
));
});
}
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!
Vous pouvez faire quelque chose comme
_mapController.onMarkerTapped.add((marker) {
// your code here
});
Où _mapController
est une instance de GoogleMapController
:)
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);
}