領導一個成功的 Flutter 應用程序開發(fā)項目往往源于應用程序架構的強大組織。使用 Flutter 包是將應用程序文件和功能部分分組為可重用組件的絕佳方式,從而使團隊協(xié)作更容易。本教程將帶您完成為下一個 Flutter 項目創(chuàng)建自定義包所需的所有步驟。
概述
在講解如何創(chuàng)建自定義包之前,我們先回顧一下 Flutter 開發(fā)者為什么需要使用包,以及自定義包是如何使用的。該包的目標是隔離可重用的功能,并使應用程序的其他部分可以輕松訪問它。單個應用程序可以有多個自定義包。
例如,我們可以創(chuàng)建一個自定義包來處理不同按鈕的 HTTP 網絡 API 連接,以將結果顯示到不同的屏幕。組織代碼的一個好方法是將所有連接功能隔離到一個名為connection. 連接目錄成為連接包。您還可以為動畫創(chuàng)建另一個包并在該包中組織自定義動畫。您創(chuàng)建的每個包都放在一個名為packages.
一旦代碼在包中隔離,您就可以在主項目pubspec.yaml應用程序配置文件中使您的應用程序可以訪問該包。pubspec.yaml根據(jù)您分發(fā)包的方式,文件的語法略有不同。
一旦使用 使程序包可供應用程序使用pubspec.yaml,使用該程序包的每個文件都會使用以下語法導入該程序包import 'package:name/file.dart`;
讓我們用例子來說明這個過程,從pubspec.yaml 配置開始。
3種類型的包依賴配置格式
構建和分發(fā)自定義 Flutter 包有以下三種策略:
- 發(fā)布到 pub.dev;
- 發(fā)布到 GitHub 或等效的獨立存儲庫;
- 將包存儲在您的主項目存儲庫中。
1. pub.dev
如果將包發(fā)布到 pub.dev,則可以從pubspec.yaml, 依賴項下訪問它。由于我的庫不在 pub.dev 上,我將展示 HTTP 包的語法。
YAML:
dependencies:
http : ^0.13.3
2. 遠程 Git 服務器
在大多數(shù)情況下,您不需要讓很多人都可以訪問您的包。在這些情況下,您可以使用以下語法從網絡訪問庫。
YAML:
dependencies:
theta:
url: https://github.com/codetricity/theta
ref: mai
在上面的例子中,包名是theta. 該包在 GitHub 上的main 分支下可用。
3. 項目的 Packages 文件夾
您還可以將包存儲在主應用程序項目文件夾中。如果包名是theta,則存放在主工程目錄下packages/theta。
如果包存儲在本地,則pubspec.yaml 語法如下。
YAML:
dependencies:
theta:
path: packages/theta
使用自定義包
在所有三種方法中,您都可以將自定義包導入到應用程序中以使用它。
應用代碼
Dart:
import 'package:theta/theta.dart';
void main(List<String> args) async {
print(await Camera.info);
}
自定義封裝代碼
為了說明代碼的哪一部分來自包,我將包含庫的一小段。
在上面的示例中,該部分Camera.info是位于包中的靜態(tài) gettertheta/lib/src/protocols.dart
Dart:
const String _baseUrl = 'http://192.168.1.1/osc/';
class Camera {
static Future<Map<String, dynamic>> get info async {
var url = _baseUrl + 'info';
var response = connect(url, 'get');
return response;
}
...
創(chuàng)建包后,可以輕松訪問包中的所有類和方法。
分銷策略建議
您應該首先將您的包放在應用程序存儲庫packages 目錄中,并且最初僅將包用于您的一個應用程序。應用程序和包穩(wěn)定后,您可以將其分發(fā)到 GitHub 上,供團隊或組織的其他成員直接從他們的pubspec.yaml 文件中使用。
在您讓其他組可以訪問該包并且他們開始使用它之后,您將需要花更多時間進行包版本管理。
創(chuàng)建包
創(chuàng)建一個新項目。我將我的項目稱為theta_api_intro_tutorial。
在主項目頂級目錄中創(chuàng)建一個名為 packages 的文件夾。
切換到目錄并創(chuàng)建一個新包。在此示例中,我的包名為theta_connection.
flutter create --template=package theta_connection
當你創(chuàng)建一個包flutter create,它會自動創(chuàng)建另一套lib,pubspec.yaml和README.md文件。
在新創(chuàng)建的lib 目錄下,有一個主theta_connection.dart文件,它作為包中其余文件的中央連接點。
從theta_connection.dart和test/theta_connection.dart文件中刪除示例代碼。
部分
創(chuàng)建一個新文件來保存新包的第一個方法。我已經調用了我的文件protocols/test_hello.dart。
這個文件的關鍵學習點是學習如何包含part of '../theta_connection.dart'到文件的頂部。這是從包中的每個文件到主包文件的連接點,稍后將允許您的應用程序訪問該方法。
部分
除了使用 to 方法連接文件外theta_connection.dart,還需要添加一個連接 from theta_connection.darttoprotocols/test_hello.dart
恭喜,您剛剛創(chuàng)建了一個自定義包!
步驟回顧
- 創(chuàng)建一個帶有flutter create --template=package名稱的包。
- 為您的包功能創(chuàng)建一個新文件,并將其鏈接到主包文件part of。
- 在主包文件中,鏈接到帶有part.
使用你的新包
在pubspec.yaml主項目目錄的文件中,添加新包的路徑。
導入包main.dart并通過調用方法使用它hello()。
當您按下按鈕時,您應該會在控制臺中看到“Hello, world”。
擴展您的包
使用此技術,您可以向每個新目錄添加額外的目錄和文件。您還可以為不同類型的功能創(chuàng)建不同的包。
隨著應用程序的增長,您將需要管理應用程序的狀態(tài)。我之前的文章Flutter 2.0 State Management Introduction with Provider 5.0解釋了如何使用 provider管理 Flutter 應用程序的狀態(tài)。
概括
強大的應用程序架構組織是項目成功的關鍵。未能管理功能和狀態(tài)等基本領域可能會導致延遲,在某些情況下還可能導致未完成的項目。有效使用標準的 Flutter 包系統(tǒng)是組織應用程序架構的絕佳工具。為了保持開發(fā)簡單,請將您的包放在主應用程序存儲庫中,以降低包版本管理的復雜性。通過降低包版本管理的復雜性,您和您的團隊將增加使用包的機會,讓每個人都走上成功啟動項目的道路。