Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/google_maps_flutter/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.5.20+6

* Adds support for toggling the traffic layer

## 0.5.20+5

* Allow (de-)serialization of CameraPosition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,10 @@ static void interpretGoogleMapOptions(Object o, GoogleMapOptionsSink sink) {
if (indoorEnabled != null) {
sink.setIndoorEnabled(toBoolean(indoorEnabled));
}
final Object trafficEnabled = data.get("trafficEnabled");
if (trafficEnabled != null) {
sink.setTrafficEnabled(toBoolean(trafficEnabled));
}
}

/** Returns the dartMarkerId of the interpreted marker. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class GoogleMapBuilder implements GoogleMapOptionsSink {
private boolean myLocationEnabled = false;
private boolean myLocationButtonEnabled = false;
private boolean indoorEnabled = true;
private boolean trafficEnabled = false;
private Object initialMarkers;
private Object initialPolygons;
private Object initialPolylines;
Expand All @@ -32,6 +33,7 @@ GoogleMapController build(
controller.setMyLocationEnabled(myLocationEnabled);
controller.setMyLocationButtonEnabled(myLocationButtonEnabled);
controller.setIndoorEnabled(indoorEnabled);
controller.setTrafficEnabled(trafficEnabled);
controller.setTrackCameraPosition(trackCameraPosition);
controller.setInitialMarkers(initialMarkers);
controller.setInitialPolygons(initialPolygons);
Expand Down Expand Up @@ -110,6 +112,11 @@ public void setIndoorEnabled(boolean indoorEnabled) {
this.indoorEnabled = indoorEnabled;
}

@Override
public void setTrafficEnabled(boolean trafficEnabled) {
this.trafficEnabled = trafficEnabled;
}

@Override
public void setMyLocationEnabled(boolean myLocationEnabled) {
this.myLocationEnabled = myLocationEnabled;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ final class GoogleMapController
private boolean myLocationEnabled = false;
private boolean myLocationButtonEnabled = false;
private boolean indoorEnabled = true;
private boolean trafficEnabled = false;
private boolean disposed = false;
private final float density;
private MethodChannel.Result mapReadyResult;
Expand Down Expand Up @@ -169,6 +170,7 @@ private CameraPosition getCameraPosition() {
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap;
this.googleMap.setIndoorEnabled(this.indoorEnabled);
this.googleMap.setTrafficEnabled(this.trafficEnabled);
googleMap.setOnInfoWindowClickListener(this);
if (mapReadyResult != null) {
mapReadyResult.success(null);
Expand Down Expand Up @@ -327,6 +329,11 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) {
result.success(googleMap.getUiSettings().isMyLocationButtonEnabled());
break;
}
case "map#isTrafficEnabled":
{
result.success(googleMap.isTrafficEnabled());
break;
}
case "map#setStyle":
{
String mapStyle = (String) call.arguments;
Expand Down Expand Up @@ -664,4 +671,8 @@ private int checkSelfPermission(String permission) {
public void setIndoorEnabled(boolean indoorEnabled) {
this.indoorEnabled = indoorEnabled;
}

public void setTrafficEnabled(boolean trafficEnabled) {
this.trafficEnabled = trafficEnabled;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ interface GoogleMapOptionsSink {

void setIndoorEnabled(boolean indoorEnabled);

void setTrafficEnabled(boolean trafficEnabled);

void setInitialMarkers(Object initialMarkers);

void setInitialPolygons(Object initialPolygons);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,8 @@ class GoogleMapInspector {
Future<bool> isMyLocationButtonEnabled() async {
return await _channel.invokeMethod<bool>('map#isMyLocationButtonEnabled');
}

Future<bool> isTrafficEnabled() async {
return await _channel.invokeMethod<bool>('map#isTrafficEnabled');
}
}
25 changes: 25 additions & 0 deletions packages/google_maps_flutter/example/test_driver/google_maps.dart
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,31 @@ void main() {
expect(secondVisibleRegion.contains(newCenter), isTrue);
});

test('testTraffic', () async {
final Key key = GlobalKey();
final Completer<GoogleMapInspector> inspectorCompleter =
Completer<GoogleMapInspector>();

await pumpWidget(Directionality(
textDirection: TextDirection.ltr,
child: GoogleMap(
key: key,
initialCameraPosition: _kInitialCameraPosition,
trafficEnabled: true,
onMapCreated: (GoogleMapController controller) {
final GoogleMapInspector inspector =
// ignore: invalid_use_of_visible_for_testing_member
GoogleMapInspector(controller.channel);
inspectorCompleter.complete(inspector);
},
),
));

final GoogleMapInspector inspector = await inspectorCompleter.future;
final bool isTrafficEnabled = await inspector.isTrafficEnabled();
expect(isTrafficEnabled, true);
});

test('testMyLocationButtonToggle', () async {
final Key key = GlobalKey();
final Completer<GoogleMapInspector> inspectorCompleter =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
- (void)setCameraTargetBounds:(GMSCoordinateBounds *)bounds;
- (void)setCompassEnabled:(BOOL)enabled;
- (void)setIndoorEnabled:(BOOL)enabled;
- (void)setTrafficEnabled:(BOOL)enabled;
- (void)setMapType:(GMSMapViewType)type;
- (void)setMinZoom:(float)minZoom maxZoom:(float)maxZoom;
- (void)setPaddingTop:(float)top left:(float)left bottom:(float)bottom right:(float)right;
Expand Down
11 changes: 11 additions & 0 deletions packages/google_maps_flutter/ios/Classes/GoogleMapController.m
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,9 @@ - (void)onMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
} else if ([call.method isEqualToString:@"map#isMyLocationButtonEnabled"]) {
NSNumber* isMyLocationButtonEnabled = @(_mapView.settings.myLocationButton);
result(isMyLocationButtonEnabled);
} else if ([call.method isEqualToString:@"map#isTrafficEnabled"]) {
NSNumber* isTrafficEnabled = @(_mapView.trafficEnabled);
result(isTrafficEnabled);
} else if ([call.method isEqualToString:@"map#setStyle"]) {
NSString* mapStyle = [call arguments];
NSString* error = [self setMapStyle:mapStyle];
Expand Down Expand Up @@ -286,6 +289,10 @@ - (void)setIndoorEnabled:(BOOL)enabled {
_mapView.indoorEnabled = enabled;
}

- (void)setTrafficEnabled:(BOOL)enabled {
_mapView.trafficEnabled = enabled;
}

- (void)setMapType:(GMSMapViewType)mapType {
_mapView.mapType = mapType;
}
Expand Down Expand Up @@ -509,6 +516,10 @@ static void InterpretMapOptions(NSDictionary* data, id<FLTGoogleMapOptionsSink>
if (indoorEnabled) {
[sink setIndoorEnabled:ToBool(indoorEnabled)];
}
id trafficEnabled = data[@"trafficEnabled"];
if (trafficEnabled) {
[sink setTrafficEnabled:ToBool(trafficEnabled)];
}
id mapType = data[@"mapType"];
if (mapType) {
[sink setMapType:ToMapViewType(mapType)];
Expand Down
9 changes: 9 additions & 0 deletions packages/google_maps_flutter/lib/src/google_map.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class GoogleMap extends StatefulWidget {
/// If no padding is specified default padding will be 0.
this.padding = const EdgeInsets.all(0),
this.indoorViewEnabled = false,
this.trafficEnabled = false,
this.markers,
this.polygons,
this.polylines,
Expand Down Expand Up @@ -164,6 +165,9 @@ class GoogleMap extends StatefulWidget {
/// Enables or disables the indoor view from the map
final bool indoorViewEnabled;

/// Enables or disables the traffic layer of the map
final bool trafficEnabled;

/// Which gestures should be consumed by the map.
///
/// It is possible for other gesture recognizers to be competing with the map on pointer
Expand Down Expand Up @@ -372,6 +376,7 @@ class _GoogleMapOptions {
this.myLocationButtonEnabled,
this.padding,
this.indoorViewEnabled,
this.trafficEnabled,
});

static _GoogleMapOptions fromWidget(GoogleMap map) {
Expand All @@ -390,6 +395,7 @@ class _GoogleMapOptions {
myLocationButtonEnabled: map.myLocationButtonEnabled,
padding: map.padding,
indoorViewEnabled: map.indoorViewEnabled,
trafficEnabled: map.trafficEnabled,
);
}

Expand Down Expand Up @@ -421,6 +427,8 @@ class _GoogleMapOptions {

final bool indoorViewEnabled;

final bool trafficEnabled;

Map<String, dynamic> toMap() {
final Map<String, dynamic> optionsMap = <String, dynamic>{};

Expand Down Expand Up @@ -449,6 +457,7 @@ class _GoogleMapOptions {
padding?.right,
]);
addIfNonNull('indoorEnabled', indoorViewEnabled);
addIfNonNull('trafficEnabled', trafficEnabled);
return optionsMap;
}

Expand Down
2 changes: 1 addition & 1 deletion packages/google_maps_flutter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: google_maps_flutter
description: A Flutter plugin for integrating Google Maps in iOS and Android applications.
author: Flutter Team <[email protected]>
homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter
version: 0.5.20+5
version: 0.5.20+6

dependencies:
flutter:
Expand Down
5 changes: 5 additions & 0 deletions packages/google_maps_flutter/test/fake_maps_controllers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ class FakePlatformGoogleMap {

bool myLocationEnabled;

bool trafficEnabled;

bool myLocationButtonEnabled;

List<dynamic> padding;
Expand Down Expand Up @@ -341,6 +343,9 @@ class FakePlatformGoogleMap {
if (options.containsKey('myLocationButtonEnabled')) {
myLocationButtonEnabled = options['myLocationButtonEnabled'];
}
if (options.containsKey('trafficEnabled')) {
trafficEnabled = options['trafficEnabled'];
}
if (options.containsKey('padding')) {
padding = options['padding'];
}
Expand Down
29 changes: 29 additions & 0 deletions packages/google_maps_flutter/test/google_map_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -498,4 +498,33 @@ void main() {

expect(platformGoogleMap.padding, <double>[60, 50, 80, 70]);
});

testWidgets('Can update traffic', (WidgetTester tester) async {
await tester.pumpWidget(
const Directionality(
textDirection: TextDirection.ltr,
child: GoogleMap(
initialCameraPosition: CameraPosition(target: LatLng(10.0, 15.0)),
trafficEnabled: false,
),
),
);

final FakePlatformGoogleMap platformGoogleMap =
fakePlatformViewsController.lastCreatedView;

expect(platformGoogleMap.trafficEnabled, false);

await tester.pumpWidget(
const Directionality(
textDirection: TextDirection.ltr,
child: GoogleMap(
initialCameraPosition: CameraPosition(target: LatLng(10.0, 15.0)),
trafficEnabled: true,
),
),
);

expect(platformGoogleMap.trafficEnabled, true);
});
}