| # Google Maps for Flutter (Developers Preview) | 
 |  | 
 | [](https://pub.dartlang.org/packages/google_maps_flutter) | 
 |  | 
 | A Flutter plugin that provides a [Google Maps](https://developers.google.com/maps/) widget. | 
 |  | 
 | ## Developers Preview Status | 
 | The plugin relies on Flutter's new mechanism for embedding Android and iOS views. | 
 | As that mechanism is currently in a developers preview, this plugin should also be | 
 | considered a developers preview. | 
 |  | 
 | Known issues are tagged with the [platform-views](https://github.com/flutter/flutter/labels/a%3A%20platform-views) and/or [maps](https://github.com/flutter/flutter/labels/p%3A%20maps) labels. | 
 |  | 
 | To use this plugin on iOS you need to opt-in for the embedded views preview by | 
 | adding a boolean property to the app's `Info.plist` file, with the key `io.flutter.embedded_views_preview` | 
 | and the value `YES`. | 
 |  | 
 | The API exposed by this plugin is not yet stable, and we expect some breaking changes to land soon. | 
 |  | 
 |  | 
 | ## Usage | 
 |  | 
 | To use this plugin, add `google_maps_flutter` as a [dependency in your pubspec.yaml file](https://flutter.io/platform-plugins/). | 
 |  | 
 | ## Getting Started | 
 |  | 
 | Get an API key at <https://cloud.google.com/maps-platform/>. | 
 |  | 
 | ### Android | 
 |  | 
 | Specify your API key in the application manifest `android/app/src/main/AndroidManifest.xml`: | 
 |  | 
 | ```xml | 
 | <manifest ... | 
 |   <application ... | 
 |     <meta-data android:name="com.google.android.geo.API_KEY" | 
 |                android:value="YOUR KEY HERE"/> | 
 | ``` | 
 |  | 
 | ### iOS | 
 |  | 
 | Specify your API key in the application delegate `ios/Runner/AppDelegate.m`: | 
 |  | 
 | ```objectivec | 
 | #include "AppDelegate.h" | 
 | #include "GeneratedPluginRegistrant.h" | 
 | #import "GoogleMaps/GoogleMaps.h" | 
 |  | 
 | @implementation AppDelegate | 
 |  | 
 | - (BOOL)application:(UIApplication *)application | 
 |     didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { | 
 |   [GMSServices provideAPIKey:@"YOUR KEY HERE"]; | 
 |   [GeneratedPluginRegistrant registerWithRegistry:self]; | 
 |   return [super application:application didFinishLaunchingWithOptions:launchOptions]; | 
 | } | 
 | @end | 
 | ``` | 
 |  | 
 | Opt-in to the embedded views preview by adding a boolean property to the app's `Info.plist` file | 
 | with the key `io.flutter.embedded_views_preview` and the value `YES`. | 
 |  | 
 | ### Both | 
 |  | 
 |  | 
 | You can now add a `GoogleMap` widget to your widget tree. | 
 |  | 
 | The map view can be controlled with the `GoogleMapController` that is passed to | 
 | the `GoogleMap`'s `onMapCreated` callback. | 
 |  | 
 | ```dart | 
 | import 'package:flutter/material.dart'; | 
 | import 'package:google_maps_flutter/google_maps_flutter.dart'; | 
 |  | 
 | void main() { | 
 |   runApp(MaterialApp( | 
 |     home: Scaffold( | 
 |       appBar: AppBar(title: const Text('Google Maps demo')), | 
 |       body: MapsDemo(), | 
 |     ), | 
 |   )); | 
 | } | 
 |  | 
 | class MapsDemo extends StatefulWidget { | 
 |   @override | 
 |   State createState() => MapsDemoState(); | 
 | } | 
 |  | 
 | class MapsDemoState extends State<MapsDemo> { | 
 |  | 
 |   GoogleMapController mapController; | 
 |  | 
 |   @override | 
 |   Widget build(BuildContext context) { | 
 |     return Padding( | 
 |       padding: EdgeInsets.all(15.0), | 
 |       child: Column( | 
 |         mainAxisAlignment: MainAxisAlignment.spaceEvenly, | 
 |         children: <Widget>[ | 
 |           Center( | 
 |             child: SizedBox( | 
 |               width: 300.0, | 
 |               height: 200.0, | 
 |               child: GoogleMap( | 
 |                 onMapCreated: _onMapCreated, | 
 |               ), | 
 |             ), | 
 |           ), | 
 |           RaisedButton( | 
 |             child: const Text('Go to London'), | 
 |             onPressed: mapController == null ? null : () { | 
 |               mapController.animateCamera(CameraUpdate.newCameraPosition( | 
 |                 const CameraPosition( | 
 |                   bearing: 270.0, | 
 |                   target: LatLng(51.5160895, -0.1294527), | 
 |                   tilt: 30.0, | 
 |                   zoom: 17.0, | 
 |                 ), | 
 |               )); | 
 |             }, | 
 |           ), | 
 |         ], | 
 |       ), | 
 |     ); | 
 |   } | 
 |  | 
 |   void _onMapCreated(GoogleMapController controller) { | 
 |     setState(() { mapController = controller; }); | 
 |   } | 
 | } | 
 | ``` | 
 |  | 
 | See the `example` directory for a complete sample app. |