一個完整的APP在實際開發中每每會依賴不少包,而這些包一般都有交叉依賴關係、版本依賴等,若是由開發者手動來管理應用中的依賴包將會很是麻煩。所以,各類開發生態或編程語言官方一般都會提供一些包管理工具,好比Android使用Gradle來管理依賴,iOS使用Cocoapods或Carthage來管理依賴,Node使用npm來管理依賴等。而Flutter也有本身的包管理工具,本節咱們主要介紹一下Flutter如何使用配置文件pubspec.yaml
(該文件位於項目根目錄)來管理第三方依賴包。git
yaml是一種直觀、可讀性強而且容易被人類閱讀的文件格式,和xml或json相比,它語法簡單並容易解析,因此yaml經常使用於配置文件,Flutter也是用yaml文件做爲其配置文件,Flutter項目默認的配置文件是pubspec.yaml
,代碼以下:github
name: demo_project
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
複製代碼
下面逐一解釋一下各個字段的意義:npm
須要注意dependencies
和dev_dependencies
的區別,前者的依賴包將做爲APP的代碼的一部分參與編譯,生成最終的安裝包;然後者的依賴包只是做爲開發階段的一些工具包,主要是用於幫助咱們提供開發、測試效率,好比Flutter的自動化測試包等。編程
Pub(pub.dev/)是Google官方的Dart Packages倉庫,相似於Node中的npm倉庫,Android中的jcenter,咱們能夠在Pub倉庫上面查找須要的包和插件,也能夠向Pub倉庫發佈咱們的包和插件。在後續的章節中筆者會介紹如何向Pub倉庫發佈包和插件。json
Flutter應用自己想要依賴某個包,須要將所依賴的包添加到dependencies
下。接下來經過一個例子來演示一下如何依賴、下載並使用第三方包。bash
實現一個顯示隨機字符串的Widget。在Pub倉庫上有一個名爲「english_words」的開源軟件包,其中包含數千個經常使用的英文單詞以及一些實用功能。所以咱們在Pub倉庫上找到「english_words」這個包,肯定其最新的版本號和是否支持Flutter。 less
咱們看到「english_words」包最新的版本是3.1.5,而且支持Flutter,接下來:dom
english_words
(3.1.5版本)添加到依賴項列表dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
# 新添加的依賴
english_words: ^3.1.5
複製代碼
english_words
依賴包使用ViSual Studio Code編輯器,將以上代碼添加到pubspec.yaml文件上,單擊右上角的Get Packages按鈕: 編程語言
[demo_project] flutter packages get
Running "flutter packages get" in demo_project... 0.8s
exit code 0
複製代碼
或者您也能夠在控制檯上,定位到當前工程目錄,而後手動運行flutter packages get
命令來下載依賴包。編輯器
english_words
依賴包import 'package:english_words/english_words.dart';
複製代碼
引入後,該行代碼將會顯示爲灰色,表示引入的依賴包還沒有使用。
english_words
依賴包來生成隨機字符串class RandomWordsWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
//生成隨機字符串
final wordPair = new WordPair.random();
return Padding(
padding: const EdgeInsets.all(8.0),
child: new Text(wordPair.toString()),
);
}
}
複製代碼
而後,將RandomWordsWidget
添加到_MyHomePageState.build
的Column
的子widget中:
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
//...省略無關代碼
RandomWordsWidget(),
],
)
複製代碼
若是應用程序正在運行,請使用熱更新鍵(r)更新正在運行的應用程序。每次使用熱更新鍵或保存項目時,都會在正在運行的應用程序中隨機選擇不一樣的單詞對,這是由於單詞對是在build
方法內部生成的,每次熱更新時,build
方法都會被執行。
上述的依賴方式是依賴Pub倉庫的,下面咱們看看如何依賴本地包和Git倉庫。
若是咱們正在本地開發一個包,包名爲pkg1,咱們能夠經過下面方式進行依賴:
dependencies:
pkg1:
path: ../../code/pkg1
複製代碼
路徑能夠是相對的,也能夠是絕對的。
除了依賴本地包,還能夠依賴存儲在Git倉庫中的包,若是軟件包位於倉庫的根目錄中,請使用如下語法:
dependencies:
pkg1:
git:
url: git://github.com/xxx/pkg1.git
複製代碼
上面假設包位於Git存儲庫的根目錄中,若是不是以上這種狀況,可使用path參數指定相對位置,例如:
dependencies:
package1:
git:
url: git://github.com/flutter/packages.git
path: packages/package1
複製代碼
本節介紹了依賴、下載和使用一個包的總體流程,而且介紹了多種不一樣的依賴方式,這些是開發Flutter項目經常使用的技能,但Dart的dependencies還有一些其它依賴方式,完整的內容讀者能夠自行查看:www.dartlang.org/tools/pub/d…