- 我們可以在這里https://pub.dev/查找三方庫
flutter 版本管理
- flutter sdk 版本的選擇:
1永品、Stable:
穩(wěn)定版。近一年中最好的beta版本冬耿。
2、Beta:
測試版召边。每隔幾周都會選取近幾個月中最好的dev版本作為Beta版村视。
3斧拍、dev:
最新的經(jīng)過完全測試的版本。包含新功能关摇,但可能有一些問題荒叶。
4、master:
最新版输虱,但未經(jīng)測試些楣。 - 查看
flutter sdk
版本號flutter --version
- flutter 升級
通過這個地址找到要更新的版本號
flutter upgrade //指令代碼 只升級依賴包
flutter upgrade v1.9.1+hotfix.3 // 升級到指定的 v1.9.1+hotfix.3 版本
flutter packages get // 獲取pubspec.yaml中所有的依賴關(guān)系
flutter packages upgrade //獲取pubspec.yaml中所有列表中的依賴項(xiàng)的最新版
注意:
不要使用 pub get 或者 pub upgrade命令來管理依賴關(guān)系。建議使用使用flutter packages get或flutter packages upgrade管理依賴關(guān)系宪睹。 如果你想手動使用pub戈毒,可以通過設(shè)置 FLUTTER_ROOT環(huán)境變量來直接運(yùn)行它。
- flutter SDK 版本回退
通過這個地址找到要更新的版本號找到要回退的版本的git節(jié)點(diǎn)標(biāo)識横堡,終端進(jìn)入到flutter根目錄埋市,然后終端執(zhí)行git reset --hard 1ad9baa
就可以了 -
pubspec.yaml
文件解釋
version: 1.0.0+1 //app版本號,其中+前面為版本號,后面為構(gòu)建號命贴。
environment:
sdk: ">=2.1.0 <3.0.0" // Dart sdk版本號道宅,多人開發(fā)中建議寫死
dependencies: // 以下是依賴的三方庫
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
dio: '3.0.9'
flutter_screenutil: '1.0.1'
flutter_easyrefresh: '2.1.1'
provide: '1.0.2'
fluro: '1.6.3'
pub
- Dart 提供了包管理工具 Pub,用來管理代碼和資源胸蛛。從本質(zhì)上說污茵,包(package)實(shí)際上就是一個包含了 pubspec.yaml 文件的目錄,其內(nèi)部可以包含代碼葬项、資源泞当、腳本、測試和文檔等文件民珍。包中包含了需要被外部依賴的功能抽象襟士,也可以依賴其他包。
- 在 Dart 中嚷量,庫和應(yīng)用都屬于包陋桂。pubspec.yaml 是包的配置文件,包含了包的元數(shù)據(jù)(比如蝶溶,包的名稱和版本)嗜历、運(yùn)行環(huán)境(也就是 Dart SDK 與 Fluter SDK 版本)、外部依賴、內(nèi)部配置(比如梨州,資源管理)痕囱。
在下面的例子中,我們聲明了一個 flutter_app_example 的應(yīng)用配置文件暴匠,其版本為 1.0咐蝇,Dart 運(yùn)行環(huán)境支持 2.1 至 3.0 之間,依賴 flutter 和 cupertino_icon:
name: flutter_app_example # 應(yīng)用名稱
description: A new Flutter application. # 應(yīng)用描述
version: 1.0.0
#Dart 運(yùn)行環(huán)境區(qū)間
environment:
sdk: ">=2.1.0 <3.0.0"
#Flutter 依賴庫
dependencies:
flutter:
sdk: flutter
cupertino_icons: ">0.1.1"
運(yùn)行環(huán)境和依賴庫 cupertino_icons 冒號后面的部分是版本約束信息巷查,由一組空格分隔的版本描述組成有序,可以支持指定版本、版本號區(qū)間岛请,以及任意版本這三種版本約束方式旭寿。比如上面的例子中,cupertino_icons 引用了大于 0.1.1 的版本崇败。
需要注意的是盅称,由于元數(shù)據(jù)與名稱使用空格分隔,因此版本號中不能出現(xiàn)空格后室;同時又由于大于符號“>”也是 YAML 語法中的折疊換行符號缩膝,因此在指定版本范圍的時候,必須使用引號岸霹, 比如">=2.1.0 < 3.0.0"疾层。
對于包,我們通常是指定版本區(qū)間贡避,而很少直接指定特定版本痛黎,因?yàn)榘壸兓茴l繁,如果有其他的包直接或間接依賴這個包的其他版本時刮吧,就會經(jīng)常發(fā)生沖突湖饱。
而對于運(yùn)行環(huán)境,如果是團(tuán)隊(duì)多人協(xié)作的工程杀捻,建議將 Dart 與 Flutter 的 SDK 環(huán)境寫死井厌,統(tǒng)一團(tuán)隊(duì)的開發(fā)環(huán)境,避免因?yàn)榭?SDK 版本出現(xiàn)的 API 差異進(jìn)而導(dǎo)致工程問題致讥。
比如仅仆,在上面的示例中,我們可以將 Dart SDK 寫死為 2.3.0拄踪,F(xiàn)lutter SDK 寫死為 1.2.1蝇恶。
environment:
sdk: 2.3.0
flutter: 1.2.1
基于版本的方式引用第三方包,需要在其 Pub 上進(jìn)行公開發(fā)布惶桐,我們可以訪問https://pub.dev/來獲取可用的第三方包。而對于不對外公開發(fā)布,或者目前處于開發(fā)調(diào)試階段的包姚糊,我們需要設(shè)置數(shù)據(jù)源贿衍,使用本地路徑或 Git 地址的方式進(jìn)行包聲明。
在下面的例子中救恨,我們分別以路徑依賴以及 Git 依賴的方式贸辈,聲明了 package1 和 package2 這兩個包:
dependencies:
package1:
path: ../package1/ # 路徑依賴
date_format:
git:
url: https://github.com/xxx/package2.git #git 依賴
在開發(fā)應(yīng)用時,我們可以不寫明具體的版本號肠槽,而是以區(qū)間的方式聲明包的依賴擎淤;但對于一個程序而言,其運(yùn)行時具體引用哪個版本的依賴包必須要確定下來秸仙。因此嘴拢,除了管理第三方依賴,包管理工具 Pub 的另一個職責(zé)是寂纪,找出一組同時滿足每個包版本約束的包版本席吴。包版本一旦確定,接下來就是下載對應(yīng)版本的包了捞蛋。
對于 dependencies 中的不同數(shù)據(jù)源孝冒,Dart 會使用不同的方式進(jìn)行管理,最終會將遠(yuǎn)端的包全部下載到本地拟杉。比如庄涡,對于 Git 聲明依賴的方式,Pub 會 clone Git 倉庫搬设;對于版本號的方式啼染,Pub 則會從 pub.dartlang.org 下載包。如果包還有其他的依賴包焕梅,比如 package1 包還依賴 package3 包迹鹅,Pub 也會一并下載。
然后贞言,在完成了所有依賴包的下載后斜棚,Pub 會在應(yīng)用的根目錄下創(chuàng)建.packages 文件,將依賴的包名與系統(tǒng)緩存中的包文件路徑進(jìn)行映射该窗,方便后續(xù)維護(hù)弟蚀。
最后,Pub 會自動創(chuàng)建 pubspec.lock 文件酗失。pubspec.lock 文件的作用類似 iOS 的 Podfile.lock 或前端的 package-lock.json 文件义钉,用于記錄當(dāng)前狀態(tài)下實(shí)際安裝的各個直接依賴、間接依賴的包的具體來源和版本號规肴。
比較活躍的第三方包的升級通常比較頻繁捶闸,因此對于多人協(xié)作的 Flutter 應(yīng)用來說夜畴,我們需要把 pubspec.lock 文件也一并提交到代碼版本管理中,這樣團(tuán)隊(duì)中的所有人在使用這個應(yīng)用時安裝的所有依賴都是完全一樣的删壮,以避免出現(xiàn)庫函數(shù)找不到或者其他的依賴錯誤贪绘。
除了提供功能和代碼維度的依賴之外,包還可以提供資源的依賴央碟。在依賴包中的 pubspec.yaml 文件已經(jīng)聲明了同樣資源的情況下税灌,為節(jié)省應(yīng)用程序安裝包大小,我們需要復(fù)用依賴包中的資源亿虽。
在下面的例子中菱涤,我們的應(yīng)用程序依賴了一個名為 package4 的包,而它的目錄結(jié)構(gòu)是這樣的:
pubspec.yaml
└──assets
├──2.0x
│ └── placeholder.png
└──3.0x
└── placeholder.png
其中洛勉,placeholder.png 是可復(fù)用資源粘秆。因此,在應(yīng)用程序中坯认,我們可以通過 Image 和 AssetImage 提供的 package 參數(shù)翻擒,根據(jù)設(shè)備實(shí)際分辨率去加載圖像。
Image.asset('assets/placeholder.png', package: 'package4');
AssetImage('assets/placeholder.png', package: 'package4');
pub get 和 pub upgrade 區(qū)別
- 有時候我們需要更新三方庫牛哺,使用pub get 更新確得不到最新的代碼陋气,這是應(yīng)為,對于一個三方庫如果pubspec中指定的版本與緩存中的版本相同的話引润,pub就不會去更新最新的巩趁,而是用pub upgrade不論本地有沒有該版本的緩存pub都回去網(wǎng)絡(luò)上更新最新的版本