flutter如何使用配置文件pubspec.yaml(位於項目根目錄)來管理第三方依賴包

官方文檔html

 

在軟件開發中,不少時候有一些公共的庫或SDK可能會被不少項目用到,所以,將這些代碼單獨抽到一個獨立模塊,而後哪一個項目須要使用時再直接集成這個模塊,即可大大提升開發效率。不少編程語言或開發工具都支持這種「模塊共享」機制,如Java語言中這種獨立模塊會被打成一個jar包,Android中的aar包,Web開發中的npm包等。爲了方便表述,咱們將這種可共享的獨立模塊統一稱爲「包」( Package)。node

一個APP在實際開發中每每會依賴不少包,而這些包一般都有交叉依賴關係、版本依賴等,若是由開發者手動來管理應用中的依賴包將會很是麻煩。所以,各類開發生態或編程語言官方一般都會提供一些包管理工具,好比在Android提供了Gradle來管理依賴,iOS用Cocoapods或Carthage來管理依賴,Node中經過npm等。而在Flutter開發中也有本身的包管理工具。本節咱們主要介紹一下flutter如何使用配置文件pubspec.yaml(位於項目根目錄)來管理第三方依賴包。android

YAML是一種直觀、可讀性高而且容易被人類閱讀的文件格式,它和xml或Json相比,它語法簡單並不是常容易解析,因此YAML經常使用於配置文件,Flutter也是用yaml文件做爲其配置文件。Flutter項目默認的配置文件是pubspec.yaml,咱們看一個簡單的示例:git

name: flutter_in_action description: First Flutter application. version: 1.0.0+1 dependencies: flutter: sdk: flutter cupertino_icons: ^0.1.2 dev_dependencies: flutter_test: sdk: flutter flutter: uses-material-design: true 

下面,咱們逐一解釋一下各個字段的意義:github

  • name:應用或包名稱。
  • description: 應用或包的描述、簡介。
  • version:應用或包的版本號。
  • dependencies:應用或包依賴的其它包或插件。
  • dev_dependencies:開發環境依賴的工具包(而不是flutter應用自己依賴的包)。
  • flutter:flutter相關的配置選項。

若是咱們的Flutter應用自己依賴某個包,咱們須要將所依賴的包添加到dependencies 下,接下來咱們經過一個例子來演示一下如何添加、下載並使用第三方包。shell

Pub倉庫

Pub(https://pub.dartlang.org/ )是Google官方的Dart Packages倉庫,相似於node中的npm倉庫,android中的jcenter。咱們能夠在Pub上面查找咱們須要的包和插件,也能夠向Pub發佈咱們的包和插件。咱們將在後面的章節中介紹如何向Pub發佈咱們的包和插件。npm

示例

接下來,咱們實現一個顯示隨機字符串的widget。有一個名爲「english_words」的開源軟件包,其中包含數千個經常使用的英文單詞以及一些實用功能。咱們首先在pub上找到english_words這個包(如圖2-5所示),肯定其最新的版本號和是否支持Flutter。編程

圖2-5

咱們看到「english_words」包最新的版本是3.1.3,而且支持flutter,接下來:app

  1. 將「english_words」(3.1.3版本)添加到依賴項列表,以下:less

    dependencies: flutter: sdk: flutter cupertino_icons: ^0.1.0 # 新添加的依賴 english_words: ^3.1.3 
  2. 下載包。在Android Studio的編輯器視圖中查看pubspec.yaml時(圖2-6),單擊右上角的 Packages get 。

    圖2-6

    這會將依賴包安裝到您的項目。咱們能夠在控制檯中看到如下內容:

    flutter packages get
    Running "flutter packages get" in flutter_in_action... Process finished with exit code 0 

    咱們也能夠在控制檯,定位到當前工程目錄,而後手動運行flutter packages get 命令來下載依賴包。另外,須要注意dependenciesdev_dependencies的區別,前者的依賴包將做爲APP的源碼的一部分參與編譯,生成最終的安裝包。然後者的依賴包只是做爲開發階段的一些工具包,主要是用於幫助咱們提升開發、測試效率,好比flutter的自動化測試包等。

  3. 引入english_words包。

    import 'package:english_words/english_words.dart'; 

    在輸入時,Android Studio會自動提供有關庫導入的建議選項。導入後該行代碼將會顯示爲灰色,表示導入的庫還沒有使用。

  4. 使用english_words包來生成隨機字符串。

    class RandomWordsWidget extends StatelessWidget { 

    咱們將RandomWordsWidget 添加到 _MyHomePageState.build 的Column的子widget中。

    Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ ... //省略無關代碼 RandomWordsWidget(), ], ) 
  5. 若是應用程序正在運行,請使用熱重載按鈕(⚡️圖標) 更新正在運行的應用程序。每次單擊熱重載或保存項目時,都會在正在運行的應用程序中隨機選擇不一樣的單詞對。 這是由於單詞對是在 build 方法內部生成的。每次熱更新時,build方法都會被執行,運行效果如圖2-7所示。

    圖2-7

其它依賴方式

上文所述的依賴方式是依賴Pub倉庫的。但咱們還能夠依賴本地包和git倉庫。

  • 依賴本地包

    若是咱們正在本地開發一個包,包名爲pkg1,咱們能夠經過下面方式依賴:

    dependencies: pkg1: path: ../../code/pkg1 

    路徑能夠是相對的,也能夠是絕對的。

  • 依賴Git:你也能夠依賴存儲在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開發中經常使用的,但還有一些其它依賴方式,完整的內容讀者能夠自行查看:https://www.dartlang.org/tools/pub/dependencies 。

相關文章
相關標籤/搜索