初略講解Flutter的包管理

zane發表於2019-06-25

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

我們看到“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按鈕:

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.buildColumn的子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…

相關文章