Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 5e4e8e9

Browse files
author
Scott McArthur
committed
Adds support for BuildingsEnabled property in Google Maps
1 parent 7d7be76 commit 5e4e8e9

File tree

12 files changed

+88
-1
lines changed

12 files changed

+88
-1
lines changed

packages/google_maps_flutter/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.5.21+11
2+
3+
* Adds support for toggling 3D buildings.
4+
15
## 0.5.21+10
26

37
* Cast error.code to unsigned long to avoid using NSInteger as %ld format warnings.

packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/Convert.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,10 @@ static void interpretGoogleMapOptions(Object o, GoogleMapOptionsSink sink) {
332332
if (trafficEnabled != null) {
333333
sink.setTrafficEnabled(toBoolean(trafficEnabled));
334334
}
335+
final Object buildingsEnabled = data.get("buildingsEnabled");
336+
if (buildingsEnabled != null) {
337+
sink.setBuildingsEnabled(toBoolean(buildingsEnabled));
338+
}
335339
}
336340

337341
/** Returns the dartMarkerId of the interpreted marker. */

packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class GoogleMapBuilder implements GoogleMapOptionsSink {
1919
private boolean myLocationButtonEnabled = false;
2020
private boolean indoorEnabled = true;
2121
private boolean trafficEnabled = false;
22+
private boolean buildingsEnabled = true;
2223
private Object initialMarkers;
2324
private Object initialPolygons;
2425
private Object initialPolylines;
@@ -34,6 +35,7 @@ GoogleMapController build(
3435
controller.setMyLocationButtonEnabled(myLocationButtonEnabled);
3536
controller.setIndoorEnabled(indoorEnabled);
3637
controller.setTrafficEnabled(trafficEnabled);
38+
controller.setBuildingsEnabled(buildingsEnabled);
3739
controller.setTrackCameraPosition(trackCameraPosition);
3840
controller.setInitialMarkers(initialMarkers);
3941
controller.setInitialPolygons(initialPolygons);
@@ -117,6 +119,11 @@ public void setTrafficEnabled(boolean trafficEnabled) {
117119
this.trafficEnabled = trafficEnabled;
118120
}
119121

122+
@Override
123+
public void setBuildingsEnabled(boolean buildingsEnabled) {
124+
this.buildingsEnabled = buildingsEnabled;
125+
}
126+
120127
@Override
121128
public void setMyLocationEnabled(boolean myLocationEnabled) {
122129
this.myLocationEnabled = myLocationEnabled;

packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ final class GoogleMapController
7676
private boolean myLocationButtonEnabled = false;
7777
private boolean indoorEnabled = true;
7878
private boolean trafficEnabled = false;
79+
private boolean buildingsEnabled = true;
7980
private boolean disposed = false;
8081
private final float density;
8182
private MethodChannel.Result mapReadyResult;
@@ -172,6 +173,7 @@ public void onMapReady(GoogleMap googleMap) {
172173
this.googleMap = googleMap;
173174
this.googleMap.setIndoorEnabled(this.indoorEnabled);
174175
this.googleMap.setTrafficEnabled(this.trafficEnabled);
176+
this.googleMap.setBuildingsEnabled(this.buildingsEnabled);
175177
googleMap.setOnInfoWindowClickListener(this);
176178
if (mapReadyResult != null) {
177179
mapReadyResult.success(null);
@@ -361,6 +363,11 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) {
361363
result.success(googleMap.isTrafficEnabled());
362364
break;
363365
}
366+
case "map#isBuildingsEnabled":
367+
{
368+
result.success(googleMap.isBuildingsEnabled());
369+
break;
370+
}
364371
case "map#setStyle":
365372
{
366373
String mapStyle = (String) call.arguments;
@@ -716,4 +723,8 @@ public void setIndoorEnabled(boolean indoorEnabled) {
716723
public void setTrafficEnabled(boolean trafficEnabled) {
717724
this.trafficEnabled = trafficEnabled;
718725
}
726+
727+
public void setBuildingsEnabled(boolean buildingsEnabled) {
728+
this.buildingsEnabled = buildingsEnabled;
729+
}
719730
}

packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapOptionsSink.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ interface GoogleMapOptionsSink {
3838

3939
void setTrafficEnabled(boolean trafficEnabled);
4040

41+
void setBuildingsEnabled(boolean buildingsEnabled);
42+
4143
void setInitialMarkers(Object initialMarkers);
4244

4345
void setInitialPolygons(Object initialPolygons);

packages/google_maps_flutter/example/test_driver/google_map_inspector.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,8 @@ class GoogleMapInspector {
5353
Future<bool> isTrafficEnabled() async {
5454
return await _channel.invokeMethod<bool>('map#isTrafficEnabled');
5555
}
56+
57+
Future<bool> isBuildingsEnabled() async {
58+
return await _channel.invokeMethod<bool>('map#isBuildingsEnabled');
59+
}
5660
}

packages/google_maps_flutter/ios/Classes/GoogleMapController.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ NS_ASSUME_NONNULL_BEGIN
1717
- (void)setCompassEnabled:(BOOL)enabled;
1818
- (void)setIndoorEnabled:(BOOL)enabled;
1919
- (void)setTrafficEnabled:(BOOL)enabled;
20+
- (void)setBuildingsEnabled:(BOOL)enabled;
2021
- (void)setMapType:(GMSMapViewType)type;
2122
- (void)setMinZoom:(float)minZoom maxZoom:(float)maxZoom;
2223
- (void)setPaddingTop:(float)top left:(float)left bottom:(float)bottom right:(float)right;

packages/google_maps_flutter/ios/Classes/GoogleMapController.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,9 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
254254
} else if ([call.method isEqualToString:@"map#isTrafficEnabled"]) {
255255
NSNumber* isTrafficEnabled = @(_mapView.trafficEnabled);
256256
result(isTrafficEnabled);
257+
} else if ([call.method isEqualToString:@"map#isBuildingsEnabled"]) {
258+
NSNumber* isBuildingsEnabled = @(_mapView.buildingsEnabled);
259+
result(isBuildingsEnabled);
257260
} else if ([call.method isEqualToString:@"map#setStyle"]) {
258261
NSString* mapStyle = [call arguments];
259262
NSString* error = [self setMapStyle:mapStyle];
@@ -315,6 +318,10 @@ - (void)setTrafficEnabled:(BOOL)enabled {
315318
_mapView.trafficEnabled = enabled;
316319
}
317320

321+
- (void)setBuildingsEnabled:(BOOL)enabled {
322+
_mapView.buildingsEnabled = enabled;
323+
}
324+
318325
- (void)setMapType:(GMSMapViewType)mapType {
319326
_mapView.mapType = mapType;
320327
}
@@ -554,6 +561,10 @@ static void InterpretMapOptions(NSDictionary* data, id<FLTGoogleMapOptionsSink>
554561
if (trafficEnabled) {
555562
[sink setTrafficEnabled:ToBool(trafficEnabled)];
556563
}
564+
id buildingsEnabled = data[@"buildingsEnabled"];
565+
if (buildingsEnabled) {
566+
[sink setBuildingsEnabled:ToBool(buildingsEnabled)];
567+
}
557568
id mapType = data[@"mapType"];
558569
if (mapType) {
559570
[sink setMapType:ToMapViewType(mapType)];

packages/google_maps_flutter/lib/src/google_map.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class GoogleMap extends StatefulWidget {
3636
this.padding = const EdgeInsets.all(0),
3737
this.indoorViewEnabled = false,
3838
this.trafficEnabled = false,
39+
this.buildingsEnabled = true,
3940
this.markers,
4041
this.polygons,
4142
this.polylines,
@@ -168,6 +169,9 @@ class GoogleMap extends StatefulWidget {
168169
/// Enables or disables the traffic layer of the map
169170
final bool trafficEnabled;
170171

172+
/// Enables or disables showing 3D buildings where available
173+
final bool buildingsEnabled;
174+
171175
/// Which gestures should be consumed by the map.
172176
///
173177
/// It is possible for other gesture recognizers to be competing with the map on pointer
@@ -377,6 +381,7 @@ class _GoogleMapOptions {
377381
this.padding,
378382
this.indoorViewEnabled,
379383
this.trafficEnabled,
384+
this.buildingsEnabled,
380385
});
381386

382387
static _GoogleMapOptions fromWidget(GoogleMap map) {
@@ -396,6 +401,7 @@ class _GoogleMapOptions {
396401
padding: map.padding,
397402
indoorViewEnabled: map.indoorViewEnabled,
398403
trafficEnabled: map.trafficEnabled,
404+
buildingsEnabled: map.buildingsEnabled,
399405
);
400406
}
401407

@@ -429,6 +435,8 @@ class _GoogleMapOptions {
429435

430436
final bool trafficEnabled;
431437

438+
final bool buildingsEnabled;
439+
432440
Map<String, dynamic> toMap() {
433441
final Map<String, dynamic> optionsMap = <String, dynamic>{};
434442

@@ -458,6 +466,7 @@ class _GoogleMapOptions {
458466
]);
459467
addIfNonNull('indoorEnabled', indoorViewEnabled);
460468
addIfNonNull('trafficEnabled', trafficEnabled);
469+
addIfNonNull('buildingsEnabled', buildingsEnabled);
461470
return optionsMap;
462471
}
463472

packages/google_maps_flutter/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: google_maps_flutter
22
description: A Flutter plugin for integrating Google Maps in iOS and Android applications.
33
author: Flutter Team <[email protected]>
44
homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter
5-
version: 0.5.21+10
5+
version: 0.5.21+11
66

77
dependencies:
88
flutter:

packages/google_maps_flutter/test/fake_maps_controllers.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ class FakePlatformGoogleMap {
4949

5050
bool trafficEnabled;
5151

52+
bool buildingsEnabled;
53+
5254
bool myLocationButtonEnabled;
5355

5456
List<dynamic> padding;
@@ -358,6 +360,9 @@ class FakePlatformGoogleMap {
358360
if (options.containsKey('trafficEnabled')) {
359361
trafficEnabled = options['trafficEnabled'];
360362
}
363+
if (options.containsKey('buildingsEnabled')) {
364+
buildingsEnabled = options['buildingsEnabled'];
365+
}
361366
if (options.containsKey('padding')) {
362367
padding = options['padding'];
363368
}

packages/google_maps_flutter/test/google_map_test.dart

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,4 +529,33 @@ void main() {
529529

530530
expect(platformGoogleMap.trafficEnabled, true);
531531
});
532+
533+
testWidgets('Can update buildings', (WidgetTester tester) async {
534+
await tester.pumpWidget(
535+
const Directionality(
536+
textDirection: TextDirection.ltr,
537+
child: GoogleMap(
538+
initialCameraPosition: CameraPosition(target: LatLng(10.0, 15.0)),
539+
buildingsEnabled: false,
540+
),
541+
),
542+
);
543+
544+
final FakePlatformGoogleMap platformGoogleMap =
545+
fakePlatformViewsController.lastCreatedView;
546+
547+
expect(platformGoogleMap.buildingsEnabled, false);
548+
549+
await tester.pumpWidget(
550+
const Directionality(
551+
textDirection: TextDirection.ltr,
552+
child: GoogleMap(
553+
initialCameraPosition: CameraPosition(target: LatLng(10.0, 15.0)),
554+
buildingsEnabled: true,
555+
),
556+
),
557+
);
558+
559+
expect(platformGoogleMap.buildingsEnabled, true);
560+
});
532561
}

0 commit comments

Comments
 (0)