Skip to content

Commit abed4b3

Browse files
committed
Add collision behavior support
1 parent 26c1493 commit abed4b3

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapController.m

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -731,10 +731,12 @@ - (nullable FlutterStandardTypedData *)takeSnapshotWithError:
731731
return imageData ? [FlutterStandardTypedData typedDataWithBytes:imageData] : nil;
732732
}
733733

734-
- (nullable NSNumber *)isAdvancedMarkersAvailable:(FlutterError *_Nullable __autoreleasing *_Nonnull) error {
735-
NSUInteger advancedMarkerFlag = self.controller.mapView.mapCapabilities & GMSMapCapabilityFlagsAdvancedMarkers;
736-
BOOL boolValue = advancedMarkerFlag != 0;
737-
return [NSNumber numberWithBool:boolValue];
734+
- (nullable NSNumber *)isAdvancedMarkersAvailable:
735+
(FlutterError *_Nullable __autoreleasing *_Nonnull)error {
736+
NSUInteger advancedMarkerFlag =
737+
self.controller.mapView.mapCapabilities & GMSMapCapabilityFlagsAdvancedMarkers;
738+
BOOL boolValue = advancedMarkerFlag != 0;
739+
return [NSNumber numberWithBool:boolValue];
738740
}
739741

740742
@end

packages/google_maps_flutter/google_maps_flutter_ios/ios/Classes/GoogleMapMarkerController.m

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,13 @@ - (void)setZIndex:(int)zIndex {
107107
self.marker.zIndex = zIndex;
108108
}
109109

110+
- (void)setCollisionBehavior:(int)collisionBehavior {
111+
if ([self.marker isKindOfClass:[GMSAdvancedMarker class]]) {
112+
GMSCollisionBehavior collitionBehaviorValue = (GMSCollisionBehavior)collisionBehavior;
113+
[(GMSAdvancedMarker *)self.marker setCollisionBehavior:(collitionBehaviorValue)];
114+
}
115+
}
116+
110117
- (void)updateFromPlatformMarker:(FGMPlatformMarker *)platformMarker
111118
registrar:(NSObject<FlutterPluginRegistrar> *)registrar
112119
screenScale:(CGFloat)screenScale {
@@ -120,6 +127,7 @@ - (void)updateFromPlatformMarker:(FGMPlatformMarker *)platformMarker
120127
[self setPosition:FGMGetCoordinateForPigeonLatLng(platformMarker.position)];
121128
[self setRotation:platformMarker.rotation];
122129
[self setZIndex:platformMarker.zIndex];
130+
[self setCollisionBehavior:platformMarker.collisionBehavior]
123131
FGMPlatformInfoWindow *infoWindow = platformMarker.infoWindow;
124132
[self setInfoWindowAnchor:FGMGetCGPointForPigeonPoint(infoWindow.anchor)];
125133
if (infoWindow.title) {
@@ -169,7 +177,10 @@ - (void)addMarker:(FGMPlatformMarker *)markerToAdd {
169177
CLLocationCoordinate2D position = FGMGetCoordinateForPigeonLatLng(markerToAdd.position);
170178
NSString *markerIdentifier = markerToAdd.markerId;
171179
NSString *clusterManagerIdentifier = markerToAdd.clusterManagerId;
172-
GMSMarker *marker = [GMSMarker markerWithPosition:position];
180+
NSNumber *isAdvanced = markerToAdd[@"isAdvanced"];
181+
GMSMarker *marker = isAdvanced ? [GMSAdvancedMarker markerWithPosition:position]
182+
: [GMSMarker markerWithPosition:position];
183+
173184
FLTGoogleMapMarkerController *controller =
174185
[[FLTGoogleMapMarkerController alloc] initWithMarker:marker
175186
markerIdentifier:markerIdentifier

packages/google_maps_flutter/google_maps_flutter_platform_interface/lib/src/types/advanced_marker.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ class AdvancedMarker extends Marker {
109109
}
110110
}
111111

112+
// Add a flag indicating that this is an advanced marker. This might be used
113+
// by platform implementations to distinguish between legacy and advanced
114+
// markers
115+
addIfPresent('isAdvanced', true);
116+
112117
addIfPresent('markerId', markerId.value);
113118
addIfPresent('alpha', alpha);
114119
addIfPresent('anchor', offsetToJson(anchor));

0 commit comments

Comments
 (0)