diff --git a/README.md b/README.md index d8bafaa..d0eab38 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,8 @@ You can refer to the example project if you run into any issues with these steps #### Show a map ( with a toolbar ) mapView.show( - new MapOptions( + new MapOptions( + mapViewType: MapViewType.MAP_TYPE_SATELLITE, showUserLocation: true, initialCameraPosition: new CameraPosition( new Location(45.5235258, -122.6732493), 14.0), diff --git a/android/src/main/kotlin/com/apptreesoftware/mapview/MapActivity.kt b/android/src/main/kotlin/com/apptreesoftware/mapview/MapActivity.kt index 9329436..bca8652 100644 --- a/android/src/main/kotlin/com/apptreesoftware/mapview/MapActivity.kt +++ b/android/src/main/kotlin/com/apptreesoftware/mapview/MapActivity.kt @@ -35,6 +35,8 @@ class MapActivity : AppCompatActivity(), override fun onMapReady(map: GoogleMap) { googleMap = map + map.setMapType(MapViewPlugin.mapViewType) + if (MapViewPlugin.showUserLocation) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { diff --git a/android/src/main/kotlin/com/apptreesoftware/mapview/MapViewPlugin.kt b/android/src/main/kotlin/com/apptreesoftware/mapview/MapViewPlugin.kt index 30457a2..7d55195 100644 --- a/android/src/main/kotlin/com/apptreesoftware/mapview/MapViewPlugin.kt +++ b/android/src/main/kotlin/com/apptreesoftware/mapview/MapViewPlugin.kt @@ -12,9 +12,17 @@ import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.MethodChannel.MethodCallHandler import io.flutter.plugin.common.MethodChannel.Result import io.flutter.plugin.common.PluginRegistry.Registrar +import com.google.android.gms.maps.GoogleMap class MapViewPlugin(val activity: Activity) : MethodCallHandler { + val mapTypeMapping: HashMap = hashMapOf( + "none" to GoogleMap.MAP_TYPE_NONE, + "normal" to GoogleMap.MAP_TYPE_NORMAL, + "satellite" to GoogleMap.MAP_TYPE_SATELLITE, + "terrain" to GoogleMap.MAP_TYPE_TERRAIN, + "hybrid" to GoogleMap.MAP_TYPE_HYBRID + ) companion object { lateinit var channel: MethodChannel @@ -24,7 +32,7 @@ class MapViewPlugin(val activity: Activity) : MethodCallHandler { lateinit var initialCameraPosition: CameraPosition var mapActivity: MapActivity? = null val REQUEST_GOOGLE_PLAY_SERVICES = 1000 - + var mapViewType: Int = GoogleMap.MAP_TYPE_NORMAL @JvmStatic fun registerWith(registrar: Registrar): Unit { @@ -95,6 +103,12 @@ class MapViewPlugin(val activity: Activity) : MethodCallHandler { toolbarActions = getToolbarActions(call.argument>>("actions")) showUserLocation = mapOptions["showUserLocation"] as Boolean mapTitle = mapOptions["title"] as String + + if (mapOptions["mapViewType"] != null) { + var mappedMapType: Int? = mapTypeMapping.get(mapOptions["mapViewType"]); + if (mappedMapType != null) mapViewType = mappedMapType as Int; + } + val intent = Intent(activity, MapActivity::class.java) activity.startActivity(intent) result.success(true) diff --git a/example/lib/main.dart b/example/lib/main.dart index bef498a..a8a0446 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -7,6 +7,7 @@ import 'package:map_view/map_options.dart'; import 'package:map_view/map_view.dart'; import 'package:map_view/marker.dart'; import 'package:map_view/toolbar_action.dart'; +import 'package:map_view/map_view_type.dart'; void main() { MapView.setApiKey(""); @@ -65,6 +66,7 @@ class _MyAppState extends State { showMap() { mapView.show( new MapOptions( + mapViewType: MapViewType.satellite, showUserLocation: true, initialCameraPosition: new CameraPosition( new Location(45.5235258, -122.6732493), 14.0), diff --git a/ios/Classes/MapViewController.m b/ios/Classes/MapViewController.m index ad84086..ae385d9 100644 --- a/ios/Classes/MapViewController.m +++ b/ios/Classes/MapViewController.m @@ -20,6 +20,7 @@ @interface MapViewController () @property (nonatomic, retain) NSArray *navigationItems; @property (nonatomic, retain) GMSCameraPosition *initialCameraPosition; @property (nonatomic, retain) NSMutableDictionary *markerIDLookup; +@property (nonatomic, assign) int mapViewType; @end @implementation MapViewController @@ -33,6 +34,7 @@ - (id)initWithPlugin:(MapViewPlugin *)plugin self.initialCameraPosition = cameraPosition; self.markerIDLookup = [NSMutableDictionary dictionary]; self.title = plugin.mapTitle; + self.mapViewType = plugin.mapViewType; } return self; } @@ -71,6 +73,8 @@ - (void)loadView { if (self._locationEnabled) { [self monitorLocationChanges]; } + + self.mapView.mapType = self.mapViewType; [self.plugin onMapReady]; } diff --git a/ios/Classes/MapViewPlugin.h b/ios/Classes/MapViewPlugin.h index 59dd36e..44ccd8f 100644 --- a/ios/Classes/MapViewPlugin.h +++ b/ios/Classes/MapViewPlugin.h @@ -10,9 +10,11 @@ @property (nonatomic, assign) FlutterMethodChannel *channel; @property (nonatomic, retain) MapViewController *mapViewController; @property (nonatomic, retain) NSString *mapTitle; +@property (nonatomic, assign) int mapViewType; - (void)onMapReady; - (void)locationDidUpdate:(CLLocation *)location; - (void)annotationTapped:(NSString *)identifier; - (void)mapTapped:(CLLocationCoordinate2D)coordinate; - (void)cameraPositionChanged:(GMSCameraPosition *)position; +- (int)getMapViewType:(NSString *)mapViewTypeName; @end diff --git a/ios/Classes/MapViewPlugin.m b/ios/Classes/MapViewPlugin.m index ed380b7..f7eefb3 100644 --- a/ios/Classes/MapViewPlugin.m +++ b/ios/Classes/MapViewPlugin.m @@ -31,6 +31,13 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result NSDictionary *mapOptions = args[@"mapOptions"]; NSDictionary *cameraDict = mapOptions[@"cameraPosition"]; self.mapTitle = mapOptions[@"title"]; + + if (mapOptions[@"mapViewType"] != (id) [NSNull null]) { + NSString *mapViewTypeName = mapOptions[@"mapViewType"]; + int mapType = [self getMapViewType:mapViewTypeName]; + self.mapViewType = mapType; + } + MapViewController *vc = [[MapViewController alloc] initWithPlugin:self navigationItems:[self buttonItemsFromActions:args[@"actions"]] cameraPosition:[self cameraPositionFromDict:cameraDict]]; @@ -155,4 +162,23 @@ - (GMSCameraPosition *)cameraPositionFromDict:(NSDictionary *)dict { return camera; } +- (int)getMapViewType:(NSString *)mapViewTypeName { + int mapType = kGMSTypeNormal; + if ([@"none" isEqualToString:mapViewTypeName]) { + mapType = kGMSTypeNone; + } + else if ([@"satellite" isEqualToString:mapViewTypeName]) { + mapType = kGMSTypeSatellite; + } + else if ([@"terrain" isEqualToString:mapViewTypeName]) { + mapType = kGMSTypeTerrain; + } + else if ([@"hybrid" isEqualToString:mapViewTypeName]) { + mapType = kGMSTypeHybrid; + } + else if ([@"none" isEqualToString:mapViewTypeName]) { + mapType = kGMSTypeNone; + } + return mapType; +} @end diff --git a/lib/map_options.dart b/lib/map_options.dart index 121a916..f74f9f0 100644 --- a/lib/map_options.dart +++ b/lib/map_options.dart @@ -1,5 +1,6 @@ import 'package:map_view/camera_position.dart'; import 'package:map_view/location.dart'; +import 'package:map_view/map_view_type.dart'; class MapOptions { final bool showUserLocation; @@ -7,17 +8,42 @@ class MapOptions { final String title; static const CameraPosition _defaultCamera = const CameraPosition(const Location(45.5329661, -122.7059508), 12.0); + MapViewType mapViewType; MapOptions( {this.showUserLocation: false, this.initialCameraPosition: _defaultCamera, - this.title: ""}); + this.title: "", + this.mapViewType: MapViewType.normal}); Map toMap() { return { "showUserLocation": showUserLocation, "cameraPosition": initialCameraPosition.toMap(), - "title": title + "title": title, + "mapViewType" : getMapTypeName(mapViewType) }; } + + String getMapTypeName(MapViewType mapType) { + String mapTypeName = "normal"; + switch(mapType) { + case MapViewType.none: + mapTypeName = "none"; + break; + case MapViewType.satellite: + mapTypeName = "satellite"; + break; + case MapViewType.terrain: + mapTypeName = "terrain"; + break; + case MapViewType.hybrid: + mapTypeName = "hybrid"; + break; + case MapViewType.normal: + mapTypeName = "normal"; + break; + } + return mapTypeName; + } } diff --git a/lib/map_view_type.dart b/lib/map_view_type.dart new file mode 100644 index 0000000..efb208d --- /dev/null +++ b/lib/map_view_type.dart @@ -0,0 +1,3 @@ + +enum MapViewType { none, normal, satellite, terrain, hybrid } +