初略講解Flutter的包管理

pubspec.yaml配置文件

一個完整的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

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

須要注意dependenciesdev_dependencies的區別,前者的依賴包將做爲APP的代碼的一部分參與編譯,生成最終的安裝包;然後者的依賴包只是做爲開發階段的一些工具包,主要是用於幫助咱們提供開發、測試效率,好比Flutter的自動化測試包等。編程

方式一:依賴Pub倉庫

Pub倉庫

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

咱們看到「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按鈕: 編程語言

Get Packages
或者按ctrl+s(保存)鍵,依賴包會自動下載到您的項目中,您能夠在控制檯中看到如下內容:

[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.buildColumn的子widget中:

Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: <Widget>[
        //...省略無關代碼
        RandomWordsWidget(),
    ],
)
複製代碼

五、熱更新,查看效果

若是應用程序正在運行,請使用熱更新鍵(r)更新正在運行的應用程序。每次使用熱更新鍵或保存項目時,都會在正在運行的應用程序中隨機選擇不一樣的單詞對,這是由於單詞對是在build方法內部生成的,每次熱更新時,build方法都會被執行。

方式二:依賴本地包和Git倉庫

上述的依賴方式是依賴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項目經常使用的技能,但Dart的dependencies還有一些其它依賴方式,完整的內容讀者能夠自行查看:www.dartlang.org/tools/pub/d…

相關文章
相關標籤/搜索