在 App 开发中,我们往往会依赖很多包,而这些包通常都有交叉依赖关系、版本依赖等,如果由开发者手动来管理应用中的依赖包将会非常麻烦。因此,各种开发生态或编程语言官方通常都会提供一些包管理工具,比如在 Android 提供了 Gradle 来管理依赖,iOS 用 Cocoapods 或 Carthage 来管理依赖,Node 中通过 npm 等。而在 Flutter 中,我们使用 Pub + yaml文件 来实现包的管理。
Pub 和 pubspec.yaml 文件
Pub 是 Dart 中的包管理工具,用来管理代码和资源;而 pubspec.yaml
是项目的配置文件。类似于 Android 中的 Gradle 和 build.gradle 文件之间的关系。
Pub 仓库是 Google 官方的 Dart Packages 仓库,类似于 node 中的 npm仓库、Android中的 jcenter。我们可以在 Pub 上面查找我们需要的包和插件,也可以向 Pub 发布我们的包和插件。
pubspec.yaml 文件内容及其字段的作用
pubspec.yaml
文件的内容及其字段的作用如下:
yaml
# 应用或包名称
name: flutter_demo
# 应用或包的描述、简介
description: "A new Flutter project."
# 此设置可避免项目被意外地通过 flutter pub publish 命令发布到 pub.dev。
# 若你有私有项目,这种设置很实用。若要将项目发布到 pub.dev,则需移除这行代码。
publish_to: 'none'
# 应用或包的版本号
version: 1.0.0+1
# 环境要求
environment:
# 规定了项目所依赖的 Dart SDK 版本
sdk: ^3.7.0
# 应用或包依赖的其他包或插件
dependencies:
# 表明项目依赖 Flutter SDK
flutter:
sdk: flutter
# Cupertino 图标字体风格的依赖,可结合 `CupertinoIcons` 类使用 iOS 风格的图标。
cupertino_icons: ^1.0.8
# 开发环境依赖的工具包(而不是flutter应用本身依赖的包)
dev_dependencies:
# flutter 测试
flutter_test:
sdk: flutter
# 代码检查规则
flutter_lints: ^5.0.0
# flutter相关的配置选项
flutter:
# 确保 Material 图标字体随应用一起包含,这样就能使用 Icons 类中的图标。
uses-material-design: true
增加包依赖
如果我们需要增加新的包依赖,这里以 characters 包为例。第一步,在 Pub 仓库 中找到我们需要的包依赖。如下图所示:
第二步,进入 Installing 项,可以看到使用的步骤,如下图所示:
第三步,安装上面介绍的流程在dependencies
后面增加新的配置,代码示例如下:
yaml
# 应用或包依赖的其他包或插件
dependencies:
# 表明项目依赖 Flutter SDK
flutter:
sdk: flutter
# Cupertino 图标字体风格的依赖,可结合 `CupertinoIcons` 类使用 iOS 风格的图标。
cupertino_icons: ^1.0.8
# 增加的包依赖
characters: ^1.4.0
第四步,点击 Pub get 将依赖包安装到我们的项目
安装完成之后,我们就可以导入 import 'package:characters/characters.dart';
包来使用了。
- Pub get:根据
pubspec.yaml
文件中声明的依赖,下载并安装所有必需的包(包括直接依赖和间接依赖)- Pub outdated: 分析当前项目的依赖,列出所有可升级的包及其最新版本
- Pub upgrade: 用于检索当前 Package 所依赖的其它 Package 的最新版本。如果 pubspec.lock 文件已经存在,则忽略其保存的版本并以 pubspec 文件中指定的最新版本为主。
- Flutter doctor: 用于检查和诊断开发环境中的问题。它会列出当前系统中安装的依赖项,并指出任何缺失或配置错误的部分。
其他依赖方式
上文所述的依赖方式是依赖Pub仓库的。但我们还可以依赖本地包和git仓库。
依赖本地包
如果我们正在本地开发一个包,包名为pkg1,我们可以通过下面方式依赖:
yaml
dependencies:
pkg1:
path: ../../code/pkg1
注意:路径可以是相对的,也可以是绝对的。
依赖Git
你也可以依赖存储在Git仓库中的包。如果软件包位于仓库的根目录中,请使用以下语法
yaml
dependencies:
pkg1:
git:
url: git://github.com/xxx/pkg1.git
上面假定包位于Git存储库的根目录中。如果不是这种情况,可以使用path参数指定相对位置,例如:
yaml
dependencies:
package1:
git:
url: git://github.com/flutter/packages.git
path: packages/package1
上面介绍的这些依赖方式是Flutter开发中常用的,但还有一些其他依赖方式,完整的内容读者可以自行查看:www.dartlang.org/tools/pub/d... 。