From 283d19a903ab4f254d26c7e730f343db9180ae56 Mon Sep 17 00:00:00 2001 From: Helen Guov Date: Mon, 20 Nov 2017 18:47:52 +1300 Subject: [PATCH 1/3] handle infoWindowTapped --- .../kotlin/com/apptreesoftware/mapview/MapActivity.kt | 4 ++++ .../com/apptreesoftware/mapview/MapViewPlugin.kt | 4 ++++ example/lib/main.dart | 5 +++++ lib/map_view.dart | 11 +++++++++++ 4 files changed, 24 insertions(+) diff --git a/android/src/main/kotlin/com/apptreesoftware/mapview/MapActivity.kt b/android/src/main/kotlin/com/apptreesoftware/mapview/MapActivity.kt index 9329436..519659a 100644 --- a/android/src/main/kotlin/com/apptreesoftware/mapview/MapActivity.kt +++ b/android/src/main/kotlin/com/apptreesoftware/mapview/MapActivity.kt @@ -63,6 +63,9 @@ class MapActivity : AppCompatActivity(), val loc = map.myLocation ?: return@setOnMyLocationChangeListener MapViewPlugin.locationDidUpdate(loc) } + map.setOnInfoWindowClickListener{ marker -> + MapViewPlugin.infoWindowTapped(marker.tag as String) + } map.moveCamera(CameraUpdateFactory.newCameraPosition( MapViewPlugin.initialCameraPosition)) MapViewPlugin.onMapReady() @@ -76,6 +79,7 @@ class MapActivity : AppCompatActivity(), return super.onCreateOptionsMenu(menu) } + override fun onOptionsItemSelected(item: MenuItem): Boolean { MapViewPlugin.handleToolbarAction(item.itemId) return true diff --git a/android/src/main/kotlin/com/apptreesoftware/mapview/MapViewPlugin.kt b/android/src/main/kotlin/com/apptreesoftware/mapview/MapViewPlugin.kt index 30457a2..4fea396 100644 --- a/android/src/main/kotlin/com/apptreesoftware/mapview/MapViewPlugin.kt +++ b/android/src/main/kotlin/com/apptreesoftware/mapview/MapViewPlugin.kt @@ -79,6 +79,10 @@ class MapViewPlugin(val activity: Activity) : MethodCallHandler { "longitude" to loc.longitude )) } + + fun infoWindowTapped(id: String) { + this.channel.invokeMethod("infoWindowTapped", id) + } } override fun onMethodCall(call: MethodCall, result: Result): Unit { diff --git a/example/lib/main.dart b/example/lib/main.dart index bef498a..02307d8 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -105,6 +105,11 @@ class _MyAppState extends State { } }); compositeSubscription.add(sub); + + sub = mapView.onInfoWindowTapped.listen((marker) { + debugPrint("\nAPP LEVEL - DETECT CLICK INFO WINDOW $marker \n"); + }); + compositeSubscription.add(sub); } _handleDismiss() async { diff --git a/lib/map_view.dart b/lib/map_view.dart index 495da5d..e79db65 100644 --- a/lib/map_view.dart +++ b/lib/map_view.dart @@ -21,6 +21,8 @@ class MapView { new StreamController.broadcast(); StreamController _mapReadyStreamController = new StreamController.broadcast(); + StreamController _infoWindowStreamController = + new StreamController.broadcast(); Map _annotations = {}; @@ -113,6 +115,8 @@ class MapView { Stream get onMapReady => _mapReadyStreamController.stream; + Stream get onInfoWindowTapped => _infoWindowStreamController.stream; + Future _handleMethod(MethodCall call) async { switch (call.method) { case "onMapReady": @@ -129,6 +133,13 @@ class MapView { _annotationStreamController.add(annotation); } return new Future.value(""); + case "infoWindowTapped": + String id = call.arguments; + var annotation = _annotations[id]; + if (annotation != null) { + _infoWindowStreamController.add(annotation); + } + return new Future.value(""); case "mapTapped": Map locationMap = call.arguments; Location location = new Location.fromMap(locationMap); From e1318353a20d089c9410b5dc15e6548aa034d8ba Mon Sep 17 00:00:00 2001 From: Helen Guov Date: Thu, 7 Dec 2017 15:15:50 +1300 Subject: [PATCH 2/3] ios - added event listener for infoWindowTapped --- ios/Classes/MapViewController.m | 5 ++++- ios/Classes/MapViewPlugin.h | 1 + ios/Classes/MapViewPlugin.m | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ios/Classes/MapViewController.m b/ios/Classes/MapViewController.m index ad84086..30e05e2 100644 --- a/ios/Classes/MapViewController.m +++ b/ios/Classes/MapViewController.m @@ -190,11 +190,14 @@ - (BOOL)mapView:(GMSMapView *)mapView didTapMarker:(GMSMarker *)marker { return NO; } +- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker { + [self.plugin infoWindowTapped:marker.userData]; +} + - (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate { [self.plugin mapTapped:coordinate]; } - - (void)mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position { [self.plugin cameraPositionChanged:position]; } diff --git a/ios/Classes/MapViewPlugin.h b/ios/Classes/MapViewPlugin.h index 59dd36e..df599e8 100644 --- a/ios/Classes/MapViewPlugin.h +++ b/ios/Classes/MapViewPlugin.h @@ -13,6 +13,7 @@ - (void)onMapReady; - (void)locationDidUpdate:(CLLocation *)location; - (void)annotationTapped:(NSString *)identifier; +- (void)infoWindowTapped:(NSString *)identifier; - (void)mapTapped:(CLLocationCoordinate2D)coordinate; - (void)cameraPositionChanged:(GMSCameraPosition *)position; @end diff --git a/ios/Classes/MapViewPlugin.m b/ios/Classes/MapViewPlugin.m index ed380b7..1af188c 100644 --- a/ios/Classes/MapViewPlugin.m +++ b/ios/Classes/MapViewPlugin.m @@ -135,6 +135,10 @@ - (void)annotationTapped:(NSString *)identifier { [self.channel invokeMethod:@"annotationTapped" arguments:identifier]; } +- (void)infoWindowTapped:(GMSMarker *)identifier { + [self.channel invokeMethod:@"infoWindowTapped" arguments:identifier]; +} + - (void)mapTapped:(CLLocationCoordinate2D)coordinate { [self.channel invokeMethod:@"mapTapped" arguments:@{@"latitude": @(coordinate.latitude), @"longitude": @(coordinate.longitude)}]; } From d9b44b49e0435a2161500939d8d3373629d667b5 Mon Sep 17 00:00:00 2001 From: Helen Guov Date: Thu, 7 Dec 2017 15:23:56 +1300 Subject: [PATCH 3/3] print infoWindow title in example when handling infoWindowTapped --- example/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 02307d8..aff511e 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -107,7 +107,7 @@ class _MyAppState extends State { compositeSubscription.add(sub); sub = mapView.onInfoWindowTapped.listen((marker) { - debugPrint("\nAPP LEVEL - DETECT CLICK INFO WINDOW $marker \n"); + debugPrint("\nAPP LEVEL - DETECT CLICK INFO WINDOW ${marker.title} \n"); }); compositeSubscription.add(sub); }