App下載

在Flutter 項(xiàng)目開發(fā)中怎么避免項(xiàng)目失?。渴褂米远x Flutter 包避免項(xiàng)目失敗方法!

紓寒 2021-08-25 14:26:56 瀏覽數(shù) (3289)
反饋

領(lǐng)導(dǎo)一個成功的 Flutter 應(yīng)用程序開發(fā)項(xiàng)目往往源于應(yīng)用程序架構(gòu)的強(qiáng)大組織。使用 Flutter 包是將應(yīng)用程序文件和功能部分分組為可重用組件的絕佳方式,從而使團(tuán)隊(duì)協(xié)作更容易。本教程將帶您完成為下一個 Flutter 項(xiàng)目創(chuàng)建自定義包所需的所有步驟。

還提供完整的分步視頻 和完整代碼 。

概述

在講解如何創(chuàng)建自定義包之前,我們先回顧一下 Flutter 開發(fā)者為什么需要使用包,以及自定義包是如何使用的。該包的目標(biāo)是隔離可重用的功能,并使應(yīng)用程序的其他部分可以輕松訪問它。單個應(yīng)用程序可以有多個自定義包。

例如,我們可以創(chuàng)建一個自定義包來處理不同按鈕的 HTTP 網(wǎng)絡(luò) API 連接,以將結(jié)果顯示到不同的屏幕。組織代碼的一個好方法是將所有連接功能隔離到一個名為connection. 連接目錄成為連接包。您還可以為動畫創(chuàng)建另一個包并在該包中組織自定義動畫。您創(chuàng)建的每個包都放在一個名為packages.

一旦代碼在包中隔離,您就可以在主項(xiàng)目pubspec.yaml應(yīng)用程序配置文件中使您的應(yīng)用程序可以訪問該包。pubspec.yaml根據(jù)您分發(fā)包的方式,文件的語法略有不同。

一旦使用 使程序包可供應(yīng)用程序使用pubspec.yaml,使用該程序包的每個文件都會使用以下語法導(dǎo)入該程序包import 'package:name/file.dart`;

讓我們用例子來說明這個過程,從pubspec.yaml 配置開始。

3種類型的包依賴配置格式 

構(gòu)建和分發(fā)自定義 Flutter 包有以下三種策略:

  1. 發(fā)布到 pub.dev;
  2. 發(fā)布到 GitHub 或等效的獨(dú)立存儲庫;
  3. 將包存儲在您的主項(xiàng)目存儲庫中。

1. pub.dev

如果將包發(fā)布到 pub.dev,則可以從pubspec.yaml, 依賴項(xiàng)下訪問它。由于我的庫不在 pub.dev 上,我將展示 HTTP 包的語法。

YAML:

dependencies: 
 http : ^0.13.3

2. 遠(yuǎn)程 Git 服務(wù)器

在大多數(shù)情況下,您不需要讓很多人都可以訪問您的包。在這些情況下,您可以使用以下語法從網(wǎng)絡(luò)訪問庫。

YAML:

dependencies:
 theta:
    url: https://github.com/codetricity/theta 
    ref: mai

在上面的例子中,包名是theta. 該包在 GitHub 上的main 分支下可用。

3. 項(xiàng)目的 Packages 文件夾

您還可以將包存儲在主應(yīng)用程序項(xiàng)目文件夾中。如果包名是theta,則存放在主工程目錄下packages/theta。

如果包存儲在本地,則pubspec.yaml 語法如下。

YAML:

dependencies:
  theta:
    path: packages/theta

使用自定義包

在所有三種方法中,您都可以將自定義包導(dǎo)入到應(yīng)用程序中以使用它。

應(yīng)用代碼

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)建包后,可以輕松訪問包中的所有類和方法。

分銷策略建議

您應(yīng)該首先將您的包放在應(yīng)用程序存儲庫packages 目錄中,并且最初僅將包用于您的一個應(yīng)用程序。應(yīng)用程序和包穩(wěn)定后,您可以將其分發(fā)到 GitHub 上,供團(tuán)隊(duì)或組織的其他成員直接從他們的pubspec.yaml 文件中使用。 

在您讓其他組可以訪問該包并且他們開始使用它之后,您將需要花更多時(shí)間進(jìn)行包版本管理。

創(chuàng)建包

創(chuàng)建一個新項(xiàng)目。我將我的項(xiàng)目稱為theta_api_intro_tutorial。

在主項(xiàng)目頂級目錄中創(chuàng)建一個名為 packages 的文件夾。


切換到目錄并創(chuàng)建一個新包。在此示例中,我的包名為theta_connection.

flutter create --template=package theta_connection

當(dāng)你創(chuàng)建一個包flutter create,它會自動創(chuàng)建另一套lib,pubspec.yaml和README.md文件。

在新創(chuàng)建的lib 目錄下,有一個主theta_connection.dart文件,它作為包中其余文件的中央連接點(diǎn)。

從theta_connection.dart和test/theta_connection.dart文件中刪除示例代碼。


部分

創(chuàng)建一個新文件來保存新包的第一個方法。我已經(jīng)調(diào)用了我的文件protocols/test_hello.dart。

這個文件的關(guān)鍵學(xué)習(xí)點(diǎn)是學(xué)習(xí)如何包含part of '../theta_connection.dart'到文件的頂部。這是從包中的每個文件到主包文件的連接點(diǎn),稍后將允許您的應(yīng)用程序訪問該方法。


部分

除了使用 to 方法連接文件外theta_connection.dart,還需要添加一個連接 from theta_connection.darttoprotocols/test_hello.dart


恭喜,您剛剛創(chuàng)建了一個自定義包!

步驟回顧

  1. 創(chuàng)建一個帶有flutter create --template=package名稱的包。
  2. 為您的包功能創(chuàng)建一個新文件,并將其鏈接到主包文件part of。
  3. 在主包文件中,鏈接到帶有part.

使用你的新包

在pubspec.yaml主項(xiàng)目目錄的文件中,添加新包的路徑。


 導(dǎo)入包main.dart并通過調(diào)用方法使用它hello()。


當(dāng)您按下按鈕時(shí),您應(yīng)該會在控制臺中看到“Hello, world”。


擴(kuò)展您的包

使用此技術(shù),您可以向每個新目錄添加額外的目錄和文件。您還可以為不同類型的功能創(chuàng)建不同的包。

隨著應(yīng)用程序的增長,您將需要管理應(yīng)用程序的狀態(tài)。我之前的文章Flutter 2.0 State Management Introduction with Provider 5.0解釋了如何使用 provider管理 Flutter 應(yīng)用程序的狀態(tài)。 

概括

強(qiáng)大的應(yīng)用程序架構(gòu)組織是項(xiàng)目成功的關(guān)鍵。未能管理功能和狀態(tài)等基本領(lǐng)域可能會導(dǎo)致延遲,在某些情況下還可能導(dǎo)致未完成的項(xiàng)目。有效使用標(biāo)準(zhǔn)的 Flutter 包系統(tǒng)是組織應(yīng)用程序架構(gòu)的絕佳工具。為了保持開發(fā)簡單,請將您的包放在主應(yīng)用程序存儲庫中,以降低包版本管理的復(fù)雜性。通過降低包版本管理的復(fù)雜性,您和您的團(tuán)隊(duì)將增加使用包的機(jī)會,讓每個人都走上成功啟動項(xiàng)目的道路。


0 人點(diǎn)贊