Googleマップマーカー(google_maps_flutter)のタップイベントのカスタムハンドラーを追加するにはどうすればよいですか?私はconsumeTapEvents
だけを見ることができます。これは実際には関数をとらず、ブール値のみを受け取ります。 GestureDetector
の使用を考えましたが、正しくないようです。
Googleマップのマーカーでイベントを処理する標準的な方法は何ですか?クリックすると新しいページに移動しようとしています。
ありがとう
void _onMapCreated(GoogleMapController controller){
this._controller = controller;
controller.onMarkerTapped.add(_onMarkerTapped);
}
void _onMarkerTapped(Marker marker) {
...
}
Widget build(BuildContext context) {
... GoogleMap(
onMapCreated: _onMapCreated,
options: GoogleMapOptions(
...
));
}
マッププラグインのonTapまたはonLongPressオプションを使用して、タップイベントを監視できます。次に、タップした位置に次の方法でマーカーを追加できます
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,
),
ここで、_onAddMarkerButtonPressed関数は
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,
));
});
}
現在のリリースはバージョン0.0.3では開発者プレビューであることに注意してください。少し時間をかけて、動作するようにしてください。
あなたは次のようなことができます
_mapController.onMarkerTapped.add((marker) {
// your code here
});
どこ _mapController
はGoogleMapController
のインスタンスです:)
マーカーを作成するときにカスタムオブジェクトを作成します。
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);
}