pubspec.yaml配置檔案
一個完整的應用程式往往會依賴很多第三方包,正如在原生開發中,Android使用Gradle來管理依賴,iOS使用Cocoapods或Carthage來管理依賴,而Flutter也有自己的依賴管理工具,本節我們主要介紹一下Flutter如何使用配置檔案pubspec.yaml
(該檔案位於專案根目錄)來管理第三方依賴包。
yaml是一種直觀、可讀性強並且容易被人類閱讀的檔案格式,和xml或json相比,它語法簡單並容易解析,所以yaml常用於配置檔案,Flutter也是用yaml檔案作為其配置檔案,Flutter專案預設的配置檔案是pubspec.yaml
,程式碼如下:
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
複製程式碼
下面逐一解釋一下各個欄位的意義:
- name:應用或包名稱
- description:應用或包的描述、簡介
- version:應用或包的版本號
- environment:應用或包的開發環境
- dependencies:應用或包依賴的其他包或外掛
- dev_dependencies:開發環境依賴的工具包(而不是Flutter應用本身依賴的包)
- flutter:Flutter相關的配置選項
方式一:依賴Pub倉庫
Pub倉庫
Pub(pub.dev/)是Google官方的Dart Packages倉庫,類似於Node中的npm倉庫,Android中的jcenter,我們可以在Pub倉庫上面查詢需要的包和外掛,也可以向Pub倉庫釋出我們的包和外掛。在後續的章節中筆者會介紹如何向Pub倉庫釋出包和外掛。
Flutter應用本身想要依賴某個包,需要將所依賴的包新增到dependencies
下。接下來通過一個例子來演示一下如何依賴、下載並使用第三方包。
依賴、下載並使用第三方包
實現一個顯示隨機字串的Widget。在Pub倉庫上有一個名為“english_words”的開源軟體包,其中包含數千個常用的英文單詞以及一些實用功能。因此我們在Pub倉庫上找到“english_words”這個包,確定其最新的版本號和是否支援Flutter。
我們看到“english_words”包最新的版本是3.1.5,並且支援Flutter,接下來:
1、將english_words
(3.1.5版本)新增到依賴項列表
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
# 新新增的依賴
english_words: ^3.1.5
複製程式碼
2、下載english_words
依賴包
使用ViSual Studio Code編輯器,將以上程式碼新增到pubspec.yaml檔案上,單擊右上角的Get Packages按鈕:
或者按ctrl+s(儲存)鍵,依賴包會自動下載到您的專案中,您可以在控制檯中看到以下內容:[demo_project] flutter packages get
Running "flutter packages get" in demo_project... 0.8s
exit code 0
複製程式碼
或者您也可以在控制檯上,手動執行flutter packages get
命令來下載依賴包。
3、引入english_words
依賴包
import 'package:english_words/english_words.dart';
複製程式碼
引入後,該行程式碼將會顯示為灰色,表示引入的依賴包尚未使用。
4、使用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(),
],
)
複製程式碼
5、執行應用程式,檢視效果
如果應用程式正在執行,請使用熱更新鍵(r)更新正在執行的應用程式。每次使用熱更新鍵或儲存專案時,都會在正在執行的應用程式中隨機選擇不同的單詞對,這是因為單詞對是在build
方法內部生成的,每次熱更新時,build
方法都會被執行。
方式二:依賴本地包和Git倉庫
依賴本地包
如果我們正在本地開發一個包,包名為pkg1,我們可以通過下面方式進行依賴:
dependencies:
pkg1:
path: ../../code/pkg1
複製程式碼
路徑可以是相對的,也可以是絕對的。
依賴Git倉庫
除了依賴本地包,還可以依賴儲存在Git倉庫中的包,如果軟體包位於倉庫的根目錄中,請使用以下語法:
dependencies:
pkg1:
git:
url: git://github.com/xxx/pkg1.git
複製程式碼
如果不是以上這種情況,可以使用path引數指定相對位置,例如:
dependencies:
package1:
git:
url: git://github.com/flutter/packages.git
path: packages/package1
複製程式碼
總結
本節介紹了依賴、下載和使用一個包的整體流程,並且介紹了多種不同的依賴方式,這些是開發Flutter專案常用的技能,但Dart的dependencies還有一些其它依賴方式,完整的內容讀者可以自行檢視:www.dartlang.org/tools/pub/d…