Flutter and the pubspec file
Every Flutter project includes a
often referred to as the pubspec.
A basic pubspec is generated when you create
a new Flutter project. It’s located at the top
of the project tree and contains metadata about
the project that the Dart and Flutter tooling
needs to know. The pubspec is written in
YAML, which is human readable, but be aware
that white space (tabs v spaces) matters.
The pubspec file specifies dependencies that the project requires, such as particular packages (and their versions), fonts, or image files. It also specifies other requirements, such as dependencies on developer packages (like testing or mocking packages), or particular constraints on the version of the Flutter SDK.
Fields common to both Dart and Flutter projects are described in the pubspec file on dart.dev. This page lists Flutter-specific fields that are only valid for a Flutter project.
When you create a new project with the
flutter create command (or by using the
equivalent button in your IDE), it creates
a pubspec for a basic Flutter app.
Here is an example of a Flutter project pubspec file. The Flutter only fields are highlighted.
name: <project name> description: A new Flutter project. publish_to: 'none' version: 1.0.0+1 environment: sdk: ">=2.18.0 <3.0.0" dependencies: flutter: # Required for every Flutter project sdk: flutter # Required for every Flutter project flutter_localizations: # Required to enable localization sdk: flutter # Required to enable localization cupertino_icons: ^1.0.5 # Only required if you use Cupertino (iOS style) icons dev_dependencies: flutter_test: sdk: flutter # Required for a Flutter project that includes tests flutter: uses-material-design: true # Required if you use the Material icon font generate: true # Enables generation of localized strings from arb files assets: # Lists assets, such as image files - images/a_dot_burr.jpeg - images/a_dot_ham.jpeg fonts: # Required if your app uses custom fonts - family: Schyler fonts: - asset: fonts/Schyler-Regular.ttf - asset: fonts/Schyler-Italic.ttf style: italic - family: Trajan Pro fonts: - asset: fonts/TrajanPro.ttf - asset: fonts/TrajanPro_Bold.ttf weight: 700
Common types of assets include static data (for example, JSON files), configuration files, icons, and images (JPEG, WebP, GIF, animated WebP/GIF, PNG, BMP, and WBMP).
Besides listing the images that are included in the app package, an image asset can also refer to one or more resolution-specific “variants”. For more information, see the resolution aware section of the Assets and images page. For information on adding assets from package dependencies, see the asset images in package dependencies section in the same page.
As shown in the above example,
each entry in the fonts section should have a
family key with the font family name,
fonts key with a list specifying the
asset and other descriptors for the font.
For examples of using fonts see the Use a custom font and Export fonts from a package recipes in the Flutter cookbook.
For more information on packages, plugins, and pubspec files, see the following:
- Creating packages on dart.dev
- Glossary of package terms on dart.dev
- Package dependencies on dart.dev
- Using packages
- What not to commit on dart.dev