Flutter支持使用由其他開發(fā)者貢獻給Flutter和Dart生態(tài)系統(tǒng)的共享軟件包。這使您可以快速構(gòu)建應(yīng)用程序,而無需從頭開始開發(fā)所有應(yīng)用程序。
現(xiàn)有的軟件包支持許多使用場景,例如,網(wǎng)絡(luò)請求(http),自定義導(dǎo)航/路由處理(fluro), 集成設(shè)備API(如url_launcher&battery) 以及使用第三方平臺SDK(如Firebase(需翻墻))。
使用包
搜索packages
Packages會被發(fā)布到了 Pub 包倉庫.
Flutter landing 頁面 顯示了與Flutter兼容的包(即聲明依賴通常與撲兼容)。所有已發(fā)布的包都支持搜索。
將包依賴項添加到應(yīng)用程序
要將包css_colors添加到應(yīng)用中,請執(zhí)行以下操作
- 依賴它
- 打開
pubspec.yaml文件,然后在dependencies下添加css_colors:
- 打開
- 安裝它
- 在 terminal中: 運行
flutter packages get
或者 - 在 IntelliJ中: 點擊
pubspec.yaml文件頂部的Packages Get
- 在 terminal中: 運行
- 導(dǎo)入它
- 在您的Dart代碼中添加相應(yīng)的
import語句.
- 在您的Dart代碼中添加相應(yīng)的
管理包依賴和版本
Package versions
所有軟件包都有一個版本號,在他們的pubspec.yaml文件中指定。Pub會在其名稱旁邊顯示軟件包的當(dāng)前版本(例如,請參閱url_launcher軟件包)以及所有先前版本的列表。
當(dāng)pubspec.yaml使用速記形式添加包時,plugin1: 這被解釋為plugin1: any,即可以使用任何版本的包。為了確保某個包在更新后還可以正常使用,我們建議使用以下格式之一指定版本范圍:
-
范圍限制: 指定一個最小和最大的版本號,如:
dependencies: url_launcher: '>=0.1.2 <0.2.0' -
范圍限制使用
caret 語法與常規(guī)的范圍約束類似(這和node下npm的版本管理類似)dependencies: collection: '^0.1.2'
更新依賴包
當(dāng)你在添加一個包后首次運行(IntelliJ中的Packages Get)flutter packages get,F(xiàn)lutter將找到包的版本保存在pubspec.lock。這確保了如果您或您的團隊中的其他開發(fā)人員運行flutter packages get后回獲取相同版本的包。
如果要升級到軟件包的新版本,例如使用該軟件包中的新功能,請運行flutter packages upgrade(在IntelliJ中點擊Upgrade dependencies)。 這將根據(jù)您在pubspec.yaml中指定的版本約束下載所允許的最高可用版本。
依賴未發(fā)布的packages
即使未在Pub上發(fā)布,軟件包也可以使用。對于不用于公開發(fā)布的專用插件,或者尚未準(zhǔn)備好發(fā)布的軟件包,可以使用其他依賴項選項:
-
路徑 依賴: 一個Flutter應(yīng)用可以依賴一個插件通過文件系統(tǒng)的
path:依賴。路徑可以是相對的,也可以是絕對的。例如,要依賴位于應(yīng)用相鄰目錄中的插件plugin1,請使用以下語法
dependencies:
plugin1:
path: ../plugin1/
Git 依賴: 你也可以依賴存儲在Git倉庫中的包。如果軟件包位于倉庫的根目錄中,請使用以下語法:
dependencies:
plugin1:
git:
url: git://github.com/flutter/plugin1.git
Git 依賴于文件夾中的包: 默認(rèn)情況下,Pub假定包位于Git存儲庫的根目錄中。如果不是這種情況,您可以使用path參數(shù)指定位置,例如:
dependencies:
package1:
git:
url: git://github.com/flutter/packages.git
path: packages/package1
最后,您可以使用ref參數(shù)將依賴關(guān)系固定到特定git commit,branch或tag。
例子
例子: 使用 CSS Colors package
該css_colors包為CSS顏色定義顏色常量,允許您在Flutter中需要Color類型的任何位置使用它們
要使用這個包:
創(chuàng)建一個名為
cssdemo的新項目-
打開
pubspec.yaml, 并將:dependencies: flutter: sdk: flutter替換為:
dependencies: flutter: sdk: flutter css_colors: ^1.0.0 在terminal中運行
flutter packages get, 或者在IntelliJ鐘點擊Packages get-
打開
lib/main.dart并替換其全部內(nèi)容:import 'package:flutter/material.dart'; import 'package:css_colors/css_colors.dart'; void main() { runApp(new MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( home: new DemoPage(), ); } } class DemoPage extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( body: new Container(color: CSSColors.orange) ); } } 運行應(yīng)用程序
Example: 使用URL Launcher package to 啟動瀏覽器
URL Launcher可以使您打開移動平臺上的默認(rèn)瀏覽器顯示給定的URL。 它演示了軟件包如何包含特定于平臺的代碼(我們稱這些軟件包為插件)。它在Android和iOS上均受支持。
使用這個插件:
創(chuàng)建一個名為
launchdemo的新項目-
打開
pubspec.yaml, 并將:dependencies: flutter: sdk: flutter替換為:
dependencies: flutter: sdk: flutter url_launcher: ^0.4.1 在terminal中運行
flutter packages get, 或者在IntelliJ鐘點擊Packages get-
打開
lib/main.dart并替換其全部內(nèi)容:import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; void main() { runApp(new MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( home: new DemoPage(), ); } } class DemoPage extends StatelessWidget { launchURL() { launch('https://flutter.io'); } @override Widget build(BuildContext context) { return new Scaffold( body: new Center( child: new RaisedButton( onPressed: launchURL, child: new Text('Show Flutter homepage'), ), ), ); } } 運行應(yīng)用程序。當(dāng)您點擊
Show Flutter homepage時,您應(yīng)該看到手機的默認(rèn)瀏覽器打開,并出現(xiàn)Flutter主頁