What is YAML?
YAML stands for “YAML Ain’t Markup Language” and is a data serialization language used for succinctly expressing data. It is utilized for configuration files similar to config files and data files like JSON.
A characteristic of YAML is its use of indentation, similar to Python, to represent hierarchical data.
What is Flutter’s pubspec.yaml?
The pubspec.yaml is a configuration file for Flutter projects, managing the application’s name, description, version information, and the packages the project depends on, including the versions of those packages.
Structure of pubspec.yaml
The basic structure of pubspec.yaml is as follows:
- name:
The name of the application. - description:
A brief description of the application. - version:
The version of the application. - environment:
Specifies the version of the Flutter SDK that the project depends on. - dependencies:
Specifies external packages that the project depends on. - dev_dependencies:
Specifies packages used only during development (e.g., testing frameworks).
Packages that run during development, such as buildrunner and riverpod_generator,
are defined here.
The actual content would be written as follows:
name: check
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.17.6 <3.18.2"
dependencies:
cupertino_icons: 1.0.2
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
flutter_riverpod:
dev_dependencies:
build_runner: ^2.4.0
dart_code_metrics: ^5.7.0
flutter_test:
sdk: flutter
Understanding Versions in pubspec.yaml
Package version numbers are expressed in the format “MAJOR.MINOR.PATCH”:
- MAJOR: Increments when there are incompatible major changes.
- MINOR: Increments when features are added in a backwards-compatible manner.
- PATCH: Increments for bug fixes or minor changes.
For example, if you specify a package as [Package Name: 3.12.4],
the major version is 3, the minor is 12, and the patch is 4.
Specifying Versions in pubspec.yaml
You can specify versions in pubspec.yaml as follows:
- Package Name: [blank]
If you do not specify a version, the latest version is automatically selected.
However, due to potential breaking changes (such as the code not running on
existing versions), it is recommended to specify explicit versions for particularly
important packages. - Package Name: 1.0.0
When a version is specified, the stated version is selected. - Package: “>=1.0.0 <2.0.0”
When specifying a version range, the version is selected within the specified range. - Package: ^1.0.0
Specifies a version that is at least the stated version and
within the same major version range. This is equivalent to “>=1.0.0 <2.0.0”.
The pubspec.lock File
The pubspec.lock file records the specific versions of each package used.
If you specify a version range, the actual selected version can be verified here.
Version Update Commands
Simply writing in pubspec.yaml does not update versions.
Use the following commands as a reference:
- Install: flutter pub get
Installs the packages listed in pubspec.yaml.
If already installed, it updates to the latest version. - Upgrade: flutter pub upgrade
Updates the package versions to the latest within the specified range. - Downgrade: flutter pub downgrade
Updates the package versions to the oldest within the specified range. - Version Dependency Check: flutter pub deps
Checks the version dependencies between packages.
Displays the project’s dependency tree and allows reference
to the dependencies between packages.
Conclusion
The pubspec.yaml in Flutter projects primarily plays a role in package management
but also manages other project metadata, external package dependencies,
and resource specifications.
Managing versions with pubspec.yaml is crucial for app development in Flutter.
I often face build failures or issues running buildrunner due to version management errors.
I hope this article helps those who are struggling with
designing pubspec.yaml in their projects.