| # 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. |