Flutter Examples
================

This directory contains several examples of using Flutter. To run an example,
use `flutter run` inside that example's directory. See the [getting started
guide](https://flutter.io/getting-started/) to install the `flutter` tool.

For additional samples, see the
[`flutter/samples`](https://github.com/flutter/samples) repo.

Available examples include:

- **Hello, world** The [hello world app](hello_world) is a minimal Flutter app
  that shows the text "hello, world."

- **Flutter gallery** The [flutter gallery app](flutter_gallery) showcases
  Flutter's widgets, including its implementation of [material
  design](https://material.io/design/).

- **Layers** The [layers vignettes](layers) show how to use the various layers
  in the Flutter framework. For details, see the [layers
  README](layers/README.md).

- **Platform Channel** The [platform channel app](platform_channel) demonstrates
  how to connect a Flutter app to platform-specific APIs. For documentation, see
  <https://flutter.io/platform-channels/>.

- **Platform Channel Swift** The [platform channel swift
  app](platform_channel_swift) is the same as [platform
  channel](platform_channel) but the iOS version is in Swift and there is no
  Android version.

## Notes

Note on Gradle wrapper files in `.gitignore`:

Gradle wrapper files should normally be checked into source control. The example
projects don't do that to avoid having several copies of the wrapper binary in
the Flutter repo. Instead, the Gradle wrapper is injected by Flutter tooling,
and the wrapper files are .gitignore'd to avoid making the Flutter repository
dirty as a side effect of running the examples.
