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

Commit 18352b2

Browse files
josh-burtoniskakaushik
authored andcommitted
[google_maps_flutter] Adds support for displaying the traffic layer (#1767)
* [google_maps_flutter] Adds support for displaying the traffic layer * [google_maps_flutter] Adds traffic layer tests
1 parent 3ad2d1d commit 18352b2

13 files changed

Lines changed: 113 additions & 1 deletion

File tree

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.20+6
2+
3+
* Adds support for toggling the traffic layer
4+
15
## 0.5.20+5
26

37
* Allow (de-)serialization of CameraPosition

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
@@ -316,6 +316,10 @@ static void interpretGoogleMapOptions(Object o, GoogleMapOptionsSink sink) {
316316
if (indoorEnabled != null) {
317317
sink.setIndoorEnabled(toBoolean(indoorEnabled));
318318
}
319+
final Object trafficEnabled = data.get("trafficEnabled");
320+
if (trafficEnabled != null) {
321+
sink.setTrafficEnabled(toBoolean(trafficEnabled));
322+
}
319323
}
320324

321325
/** 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
@@ -18,6 +18,7 @@ class GoogleMapBuilder implements GoogleMapOptionsSink {
1818
private boolean myLocationEnabled = false;
1919
private boolean myLocationButtonEnabled = false;
2020
private boolean indoorEnabled = true;
21+
private boolean trafficEnabled = false;
2122
private Object initialMarkers;
2223
private Object initialPolygons;
2324
private Object initialPolylines;
@@ -32,6 +33,7 @@ GoogleMapController build(
3233
controller.setMyLocationEnabled(myLocationEnabled);
3334
controller.setMyLocationButtonEnabled(myLocationButtonEnabled);
3435
controller.setIndoorEnabled(indoorEnabled);
36+
controller.setTrafficEnabled(trafficEnabled);
3537
controller.setTrackCameraPosition(trackCameraPosition);
3638
controller.setInitialMarkers(initialMarkers);
3739
controller.setInitialPolygons(initialPolygons);
@@ -110,6 +112,11 @@ public void setIndoorEnabled(boolean indoorEnabled) {
110112
this.indoorEnabled = indoorEnabled;
111113
}
112114

115+
@Override
116+
public void setTrafficEnabled(boolean trafficEnabled) {
117+
this.trafficEnabled = trafficEnabled;
118+
}
119+
113120
@Override
114121
public void setMyLocationEnabled(boolean myLocationEnabled) {
115122
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
@@ -74,6 +74,7 @@ final class GoogleMapController
7474
private boolean myLocationEnabled = false;
7575
private boolean myLocationButtonEnabled = false;
7676
private boolean indoorEnabled = true;
77+
private boolean trafficEnabled = false;
7778
private boolean disposed = false;
7879
private final float density;
7980
private MethodChannel.Result mapReadyResult;
@@ -169,6 +170,7 @@ private CameraPosition getCameraPosition() {
169170
public void onMapReady(GoogleMap googleMap) {
170171
this.googleMap = googleMap;
171172
this.googleMap.setIndoorEnabled(this.indoorEnabled);
173+
this.googleMap.setTrafficEnabled(this.trafficEnabled);
172174
googleMap.setOnInfoWindowClickListener(this);
173175
if (mapReadyResult != null) {
174176
mapReadyResult.success(null);
@@ -327,6 +329,11 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) {
327329
result.success(googleMap.getUiSettings().isMyLocationButtonEnabled());
328330
break;
329331
}
332+
case "map#isTrafficEnabled":
333+
{
334+
result.success(googleMap.isTrafficEnabled());
335+
break;
336+
}
330337
case "map#setStyle":
331338
{
332339
String mapStyle = (String) call.arguments;
@@ -664,4 +671,8 @@ private int checkSelfPermission(String permission) {
664671
public void setIndoorEnabled(boolean indoorEnabled) {
665672
this.indoorEnabled = indoorEnabled;
666673
}
674+
675+
public void setTrafficEnabled(boolean trafficEnabled) {
676+
this.trafficEnabled = trafficEnabled;
677+
}
667678
}

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
@@ -36,6 +36,8 @@ interface GoogleMapOptionsSink {
3636

3737
void setIndoorEnabled(boolean indoorEnabled);
3838

39+
void setTrafficEnabled(boolean trafficEnabled);
40+
3941
void setInitialMarkers(Object initialMarkers);
4042

4143
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
@@ -49,4 +49,8 @@ class GoogleMapInspector {
4949
Future<bool> isMyLocationButtonEnabled() async {
5050
return await _channel.invokeMethod<bool>('map#isMyLocationButtonEnabled');
5151
}
52+
53+
Future<bool> isTrafficEnabled() async {
54+
return await _channel.invokeMethod<bool>('map#isTrafficEnabled');
55+
}
5256
}

packages/google_maps_flutter/example/test_driver/google_maps.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,31 @@ void main() {
375375
expect(secondVisibleRegion.contains(newCenter), isTrue);
376376
});
377377

378+
test('testTraffic', () async {
379+
final Key key = GlobalKey();
380+
final Completer<GoogleMapInspector> inspectorCompleter =
381+
Completer<GoogleMapInspector>();
382+
383+
await pumpWidget(Directionality(
384+
textDirection: TextDirection.ltr,
385+
child: GoogleMap(
386+
key: key,
387+
initialCameraPosition: _kInitialCameraPosition,
388+
trafficEnabled: true,
389+
onMapCreated: (GoogleMapController controller) {
390+
final GoogleMapInspector inspector =
391+
// ignore: invalid_use_of_visible_for_testing_member
392+
GoogleMapInspector(controller.channel);
393+
inspectorCompleter.complete(inspector);
394+
},
395+
),
396+
));
397+
398+
final GoogleMapInspector inspector = await inspectorCompleter.future;
399+
final bool isTrafficEnabled = await inspector.isTrafficEnabled();
400+
expect(isTrafficEnabled, true);
401+
});
402+
378403
test('testMyLocationButtonToggle', () async {
379404
final Key key = GlobalKey();
380405
final Completer<GoogleMapInspector> inspectorCompleter =

packages/google_maps_flutter/ios/Classes/GoogleMapController.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
- (void)setCameraTargetBounds:(GMSCoordinateBounds *)bounds;
1515
- (void)setCompassEnabled:(BOOL)enabled;
1616
- (void)setIndoorEnabled:(BOOL)enabled;
17+
- (void)setTrafficEnabled:(BOOL)enabled;
1718
- (void)setMapType:(GMSMapViewType)type;
1819
- (void)setMinZoom:(float)minZoom maxZoom:(float)maxZoom;
1920
- (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
@@ -229,6 +229,9 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
229229
} else if ([call.method isEqualToString:@"map#isMyLocationButtonEnabled"]) {
230230
NSNumber* isMyLocationButtonEnabled = @(_mapView.settings.myLocationButton);
231231
result(isMyLocationButtonEnabled);
232+
} else if ([call.method isEqualToString:@"map#isTrafficEnabled"]) {
233+
NSNumber* isTrafficEnabled = @(_mapView.trafficEnabled);
234+
result(isTrafficEnabled);
232235
} else if ([call.method isEqualToString:@"map#setStyle"]) {
233236
NSString* mapStyle = [call arguments];
234237
NSString* error = [self setMapStyle:mapStyle];
@@ -286,6 +289,10 @@ - (void)setIndoorEnabled:(BOOL)enabled {
286289
_mapView.indoorEnabled = enabled;
287290
}
288291

292+
- (void)setTrafficEnabled:(BOOL)enabled {
293+
_mapView.trafficEnabled = enabled;
294+
}
295+
289296
- (void)setMapType:(GMSMapViewType)mapType {
290297
_mapView.mapType = mapType;
291298
}
@@ -509,6 +516,10 @@ static void InterpretMapOptions(NSDictionary* data, id<FLTGoogleMapOptionsSink>
509516
if (indoorEnabled) {
510517
[sink setIndoorEnabled:ToBool(indoorEnabled)];
511518
}
519+
id trafficEnabled = data[@"trafficEnabled"];
520+
if (trafficEnabled) {
521+
[sink setTrafficEnabled:ToBool(trafficEnabled)];
522+
}
512523
id mapType = data[@"mapType"];
513524
if (mapType) {
514525
[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
@@ -35,6 +35,7 @@ class GoogleMap extends StatefulWidget {
3535
/// If no padding is specified default padding will be 0.
3636
this.padding = const EdgeInsets.all(0),
3737
this.indoorViewEnabled = false,
38+
this.trafficEnabled = false,
3839
this.markers,
3940
this.polygons,
4041
this.polylines,
@@ -164,6 +165,9 @@ class GoogleMap extends StatefulWidget {
164165
/// Enables or disables the indoor view from the map
165166
final bool indoorViewEnabled;
166167

168+
/// Enables or disables the traffic layer of the map
169+
final bool trafficEnabled;
170+
167171
/// Which gestures should be consumed by the map.
168172
///
169173
/// It is possible for other gesture recognizers to be competing with the map on pointer
@@ -372,6 +376,7 @@ class _GoogleMapOptions {
372376
this.myLocationButtonEnabled,
373377
this.padding,
374378
this.indoorViewEnabled,
379+
this.trafficEnabled,
375380
});
376381

377382
static _GoogleMapOptions fromWidget(GoogleMap map) {
@@ -390,6 +395,7 @@ class _GoogleMapOptions {
390395
myLocationButtonEnabled: map.myLocationButtonEnabled,
391396
padding: map.padding,
392397
indoorViewEnabled: map.indoorViewEnabled,
398+
trafficEnabled: map.trafficEnabled,
393399
);
394400
}
395401

@@ -421,6 +427,8 @@ class _GoogleMapOptions {
421427

422428
final bool indoorViewEnabled;
423429

430+
final bool trafficEnabled;
431+
424432
Map<String, dynamic> toMap() {
425433
final Map<String, dynamic> optionsMap = <String, dynamic>{};
426434

@@ -449,6 +457,7 @@ class _GoogleMapOptions {
449457
padding?.right,
450458
]);
451459
addIfNonNull('indoorEnabled', indoorViewEnabled);
460+
addIfNonNull('trafficEnabled', trafficEnabled);
452461
return optionsMap;
453462
}
454463

0 commit comments

Comments
 (0)