# Example of embedding Flutter using FlutterView

This project demonstrates how to embed Flutter within an iOS or Android
application. On iOS, the iOS and Flutter components are built with Xcode. On
Android, the Android and Flutter components are built with Android Studio or
gradle.

You can read more about
[accessing platform and third-party services in Flutter](https://flutter.io/platform-services/).

## iOS

### Configure

Create an `ios/Flutter/Generated.xcconfig` file with this entry:

 * `FLUTTER_ROOT=[absolute path to the Flutter SDK]`

There are a number of other parameters you can control with this file:

 * `FLUTTER_APPLICATION_PATH`: The path to the directory that contains your
   `pubspec.yaml` file relative to your `xcodeproj` file.
 * `FLUTTER_BUILD_MODE`: Whether to build for `debug`, `profile`, or `release`.
   Defaults to `release`.
 * `FLUTTER_TARGET`: The path to your `main.dart` relative to your
   `pubspec.yaml`. Defaults to `lib/main.dart`.
 * `FLUTTER_FRAMEWORK_DIR`: The absolute path to the directory that contains
   `Flutter.framework`. Defaults to the `ios-release` version of
   `Flutter.framework` in the `bin/cache` directory of the Flutter SDK.

### Build

Once you've configured your project, you can open `ios/HelloServices.xcodeproj`
in Xcode and build the project as usual.

## Android

### Configure

Create an `android/local.properties` file with these entries:

 * `sdk.dir=[path to the Android SDK]`
 * `flutter.sdk=[path to the Flutter SDK]`

There are a number of other parameters you can control with this file:

 * `flutter.buildMode`: Whether to build for `debug`, `profile`, or `release`.
   Defaults to `release`.
 * `flutter.jar`: The path to `flutter.jar`. Defaults to the
   `android-arm-release` version of `flutter.jar` in the `bin/cache` directory
   of the Flutter SDK.

See `android/app/build.gradle` for project specific settings, including:

 * `source`: The path to the directory that contains your `pubspec.yaml` file
   relative to your `build.gradle` file.
 * `target`: The path to your `main.dart` relative to your `pubspec.yaml`.
   Defaults to `lib/main.dart`.

### Build

To build directly with `gradle`, use the following commands:

 * `cd android`
 * `gradle wrapper`
 * `./gradlew build`

To build with Android Studio, open the `android` folder in Android Studio and
build the project as usual.

### Updating the Dart code

You can push new Dart code to a Flutter app during development without performing
a full rebuild of the Android app package.

The `flutter refresh` tool manages this process.  `flutter refresh` will build
a snapshot of an app's Dart code, copy it to an Android device, and send an
intent instructing the Android app to load the snapshot.

To try this out:

 * Install and run the app on your device
 * Edit the Dart code
 * `flutter refresh --activity com.example.flutter/.ExampleActivity`

`flutter refresh` sends an `ACTION_RUN` intent with an extra containing the
device filesystem path where the snapshot was copied. `ExampleActivity.java`
shows how an activity can handle this intent and load the new snapshot into
a FlutterView.
