Packages are used in Dart to handle shared software like libraries and tools. These packages are published to Dart Pub and managed by Pub. Packages make code reusability and sharing easier.
In Dart, every pub package needs specific metadata to define its dependencies. This metadata is contained in a pubspec file.
A pubspec file is a YAML-coded file with the name pubspec.yaml
which contains all the package metadata, fonts, and image files.
The following properties can be included in a pubspec file:
name
The name
property represents the package name. Dart packages must follow the naming convention for Dart identifiers such as:
For instance:
name: dropdown_menu
version
The version
property represents the package version. When hosting a package on the pub.dev
website, a version number is necessary, however, local-only packages do not need to include one. If we don’t include it, our package’s version is automatically set to 0.0.0
.
For instance:
version: 1.0.3
description
The description
property gives an explanation about the package.
For instance:
description: >-
Are you tired of creating dropdown from scratch?
This package can help build a dropdown and you can customize it as you wish.
repository
The repository
property is optional. This represents the URL pointing to the package’s source code.
For instance:
repository: https://github.com/maria/dropdown-menu/
homepage
The homepage
property is optional. It represents the URL pointing to the package’s homepage.
For instance:
homepage: https://example-widget.com/dropdown
issue_tracker
The issue_tracker
property is also optional and it represents the URL for the package’s issue tracker, where existing bugs can be read and new bugs can be reported.
For instance:
issue_tracker: https://github.com/maria/dropdown/issues
documentation
The documentation
property is also optional and it includes the URL for
package’s documentation.
For instance:
documentation: https://example-widget.com/dropdown-docs
dependencies
The dependencies
property includes the dependencies used. It can be ignored if the package has no dependencies.
For instance:
dependencies:
bits: ^0.0.4
dev_dependencies
This contains the dev dependencies used. It can be ignored if the package has no dev dependencies. For instance:
dev_dependencies:
flutter_test:
sdk: flutter
environment
This includes the SDK constraint. For instance:
environment:
sdk: '>=2.10.0 <3.0.0'
platforms
This is optional. It specifies the supported platforms on the pub.dev
site.
For instance:
# This package supports all platforms listed below.
platforms:
android:
ios:
linux:
macos:
web:
windows:
funding
The funding
property is optional. This includes a list of URLs where users can support the package’s development.
For instance:
funding:
- https://www.buymeacoffee.com/my-user
- https://www.patreon.com/my-user
false_secrets
The false_secrets
property is optional. This includes the files to ignore when performing a pre-publishing search for potential leaks of secrets.
For instance:
false_secrets:
- /lib/src/hardcoded_api_key.dart
- /test/localhost_certificates/*.pem
Note: The first time you create a new Flutter project, a simple
pubspec
file is generated. It is at the top of the project tree and contains information that the Dart and Flutter tooling needs to know about the project.
pubspec.yaml
fileHere is a complete pubspec.yaml
file:
name: dropdown_menudescription: Are you tired of creating dropdown from scratch?This package can help build a dropdown and you can customize it as you wish.# The following line prevents the package from being accidentally published to# pub.dev using `pub publish`. This is preferred for private packages.publish_to: "none" # Remove this line if you wish to publish to pub.dev# The following defines the version and build number for your application.# A version number is three numbers separated by dots, like 1.2.43# followed by an optional build number separated by a +.# Both the version and the builder number may be overridden in flutter# build by specifying --build-name and --build-number, respectively.# In Android, build-name is used as versionName while build-number used as versionCode.# Read more about Android versioning at https://developer.android.com/studio/publish/versioning# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.# Read more about iOS versioning at# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.htmlversion: 1.0.0environment:sdk: ">=2.12.0 <3.0.0"repository: https://github.com/maria/dropdown-menu/homepage: https://example-widget.com/dropdownfunding:- https://www.buymeacoffee.com/my-user- https://www.patreon.com/my-user# This package supports all platforms listed below.platforms:android:ios:linux:macos:web:windows:false_secrets:- /lib/src/hardcoded_api_key.dart- /test/localhost_certificates/*.pemdependencies:cupertino_icons: ^1.0.2device_info: ^2.0.2bits: ^0.04dev_dependencies:flutter_test:sdk: flutter# For information on the generic Dart part of this file, see the# following page: https://dart.dev/tools/pub/pubspec# The following section is specific to Flutter.flutter:# The following line ensures that the Material Icons font is# included with your application, so that you can use the icons in# the material Icons class.uses-material-design: true# To add assets to your application, add an assets section, like this:assets:- assets/# An image asset can refer to one or more resolution-specific "variants", see# https://flutter.dev/assets-and-images/#resolution-aware.# For details regarding adding assets from package dependencies, see# https://flutter.dev/assets-and-images/#from-packages# To add custom fonts to your application, add a fonts section here,# in this "flutter" section. Each entry in this list should have a# "family" key with the font family name, and a "fonts" key with a# list giving the asset and other descriptors for the font. For# example:# 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## For details regarding fonts from package dependencies,# see https://flutter.dev/custom-fonts/#from-packages
Step 1: Open the pubspec.yaml
file in a Flutter project.
Step 2: Add the package to the dependencies.
For instance, assuming we want to use the like_button
package:
dependencies:
like_button: ^2.0.5
Step 3: In the terminal, run flutter pub get
or click Packages get
in Android Studio or IntelliJ.