跳到主要內容

開發套件與外掛

套件簡介

#

套件可讓您建立可輕鬆共享的模組化程式碼。一個最小的套件包含下列項目

pubspec.yaml
一個宣告套件名稱、版本、作者等等的中繼資料檔案。
lib
lib 目錄包含套件中的公開程式碼,至少會有一個單一的 <套件名稱>.dart 檔案。

套件類型

#

套件可以包含不只一種內容

Dart 套件

以 Dart 撰寫的通用套件,例如 path 套件。其中一些可能包含特定於 Flutter 的功能,因此會依賴 Flutter 框架,限制其僅在 Flutter 中使用,例如 fluro 套件。

外掛套件

一種特殊的 Dart 套件,包含以 Dart 程式碼撰寫的 API,並結合一個或多個平台特定的實作。

外掛套件可以為 Android (使用 Kotlin 或 Java)、iOS (使用 Swift 或 Objective-C)、網頁、macOS、Windows 或 Linux 撰寫,或以上任意組合。

一個具體的範例是 url_launcher 外掛套件。若要瞭解如何使用 url_launcher 套件,以及如何擴充它以實作網頁支援,請參閱 Harry Terkelsen 在 Medium 上的文章如何撰寫 Flutter 網頁外掛,第一部分

FFI 外掛套件

一種特殊的 Dart 套件,包含以 Dart 程式碼撰寫的 API,並結合一個或多個平台特定的實作,這些實作使用 Dart FFI (AndroidiOSmacOS)。

開發 Dart 套件

#

下列說明解釋如何撰寫 Flutter 套件。

步驟 1:建立套件

#

若要建立 Flutter 入門套件,請將 --template=package 旗標與 flutter create 一起使用

flutter create --template=package hello

這會在 hello 資料夾中建立一個套件專案,其中包含下列內容

LICENSE
一個(大部分)空白的授權文字檔。
test/hello_test.dart
套件的單元測試
hello.iml
IntelliJ IDE 使用的設定檔。
.gitignore
一個隱藏檔案,告訴 Git 在專案中要忽略哪些檔案或資料夾。
.metadata
IDE 用來追蹤 Flutter 專案屬性的隱藏檔案。
pubspec.yaml
一個 yaml 檔案,其中包含指定套件相依性的中繼資料。pub 工具使用。
README.md
一個入門 markdown 檔案,簡要描述套件的用途。
lib/hello.dart
一個入門應用程式,其中包含套件的 Dart 程式碼。
.idea/modules.xml.idea/workspace.xml
一個隱藏資料夾,其中包含 IntelliJ IDE 的設定檔。
CHANGELOG.md
一個(大部分)空白的 markdown 檔案,用於追蹤套件的版本變更。

步驟 2:實作套件

#

對於純 Dart 套件,只需將功能新增到主要的 lib/<套件名稱>.dart 檔案中,或新增到 lib 目錄中的數個檔案中即可。

若要測試套件,請在 test 目錄中新增單元測試

如需有關如何組織套件內容的其他詳細資訊,請參閱Dart 程式庫套件文件。

開發外掛程式套件

#

如果您想開發一個呼叫平台特定 API 的套件,您需要開發一個外掛套件。

API 使用平台通道連接到平台特定的實作。

聯合外掛程式

#

聯合外掛是一種將不同平台的支援分割到不同套件中的方式。因此,聯合外掛可以使用一個套件用於 iOS、另一個用於 Android、另一個用於網頁,還有一個用於汽車(作為 IoT 裝置的範例)。除此之外,這種方法還能讓領域專家將現有外掛擴充到他們最熟悉的平台。

聯合外掛需要下列套件

面向應用程式的套件
外掛使用者依賴此套件來使用外掛。此套件指定 Flutter 應用程式使用的 API。
平台套件
一個或多個包含平台特定實作程式碼的套件。面向應用程式的套件會呼叫這些套件,這些套件不會包含在應用程式中,除非它們包含終端使用者可存取的平台特定功能。
平台介面套件
將面向應用程式的套件黏合到平台套件的套件。此套件宣告任何平台套件必須實作的介面,才能支援面向應用程式的套件。擁有一個定義此介面的單一套件,可確保所有平台套件都以統一的方式實作相同的功能。

認可的聯合外掛

#

理想情況下,在將平台實作新增到聯合外掛時,您會與套件作者協調以包含您的實作。這樣,原始作者就會認可您的實作。

例如,假設您為(虛構的)foobar 外掛撰寫 foobar_windows 實作。在認可的外掛中,原始的 foobar 作者會將您的 Windows 實作新增為面向應用程式的套件之 pubspec 中的相依性。然後,當開發人員將 foobar 外掛包含在其 Flutter 應用程式中時,Windows 實作以及其他認可的實作,都會自動提供給應用程式。

未認可的聯合外掛

#

如果您因任何原因無法讓原始外掛作者新增您的實作,則您的外掛獲得認可。開發人員仍然可以使用您的實作,但必須手動將外掛新增到應用程式的 pubspec 檔案中。因此,開發人員必須同時包含 foobar 相依性和 foobar_windows 相依性,才能實現完整功能。

如需有關聯合外掛的更多資訊、它們為何有用,以及它們如何實作,請參閱 Harry Terkelsen 在 Medium 上的文章如何撰寫 Flutter 網頁外掛,第二部分

指定外掛程式的支援平台

#

外掛可以透過在 pubspec.yaml 檔案的 platforms 對應中新增金鑰,來指定它們支援的平台。例如,下列 pubspec 檔案顯示 hello 外掛的 flutter: 對應,該外掛僅支援 iOS 和 Android

yaml
flutter:
  plugin:
    platforms:
      android:
        package: com.example.hello
        pluginClass: HelloPlugin
      ios:
        pluginClass: HelloPlugin

在為更多平台新增外掛實作時,應相應更新 platforms 對應。例如,這是 hello 外掛之 pubspec 檔案中的對應,在更新為新增對 macOS 和網頁的支援時

yaml
flutter:
  plugin:
    platforms:
      android:
        package: com.example.hello
        pluginClass: HelloPlugin
      ios:
        pluginClass: HelloPlugin
      macos:
        pluginClass: HelloPlugin
      web:
        pluginClass: HelloPlugin
        fileName: hello_web.dart

聯合平台套件

#

平台套件使用相同的格式,但包含一個 implements 項目,指出它實作哪個面向應用程式的套件。例如,包含 hello 的 Windows 實作的 hello_windows 外掛會具有下列 flutter: 對應

yaml
flutter:
  plugin:
    implements: hello
    platforms:
      windows:
        pluginClass: HelloPlugin

認可的實作

#

面向應用程式的套件可以透過新增對平台套件的相依性,並將其包含在 platforms: 對應中作為 default_package 來認可平台套件。如果上面的 hello 外掛認可了 hello_windows,則它會如下所示

yaml
flutter:
  plugin:
    platforms:
      android:
        package: com.example.hello
        pluginClass: HelloPlugin
      ios:
        pluginClass: HelloPlugin
      windows:
        default_package: hello_windows

dependencies:
  hello_windows: ^1.0.0

請注意,如此處所示,面向應用程式的套件可以在套件內實作某些平台,以及在認可的聯合實作中實作其他平台。

共用的 iOS 和 macOS 實作

#

許多框架都使用相同或幾乎相同的 API 同時支援 iOS 和 macOS,使得有可能使用相同的程式碼庫為 iOS 和 macOS 實作一些外掛。通常,每個平台的實作都位於自己的資料夾中,但 sharedDarwinSource 選項允許 iOS 和 macOS 改為使用相同的資料夾

yaml
flutter:
  plugin:
    platforms:
      ios:
        pluginClass: HelloPlugin
        sharedDarwinSource: true
      macos:
        pluginClass: HelloPlugin
        sharedDarwinSource: true

environment:
  sdk: ^3.0.0
  # Flutter versions prior to 3.7 did not support the
  # sharedDarwinSource option.
  flutter: ">=3.7.0"

當啟用 sharedDarwinSource 時,iOS 使用 ios 目錄,而 macOS 使用 macos 目錄,這兩個平台都改為使用共用的 darwin 目錄來存放所有程式碼和資源。啟用此選項時,您需要將所有現有檔案從 iosmacos 移動到共用目錄。您也需要更新 podspec 檔案,為這兩個平台設定相依性和部署目標,例如

ruby
  s.ios.dependency 'Flutter'
  s.osx.dependency 'FlutterMacOS'
  s.ios.deployment_target = '11.0'
  s.osx.deployment_target = '10.14'

步驟 1:建立套件

#

若要建立外掛套件,請將 --template=plugin 旗標與 flutter create 一起使用。

使用 --platforms= 選項,後面接著以逗號分隔的清單,以指定外掛支援的平台。可用的平台包括:androidiosweblinuxmacoswindows。如果未指定任何平台,則產生的專案不支援任何平台。

使用 --org 選項,使用反向網域名稱表示法來指定您的組織。此值用於產生的外掛程式碼中的各種套件和套件識別碼。

預設情況下,外掛專案使用 Swift 作為 iOS 程式碼,並使用 Kotlin 作為 Android 程式碼。如果您偏好使用 Objective-C 或 Java,您可以使用 -i 指定 iOS 語言,並使用 -a 指定 Android 語言。請選擇下列其中一個

flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -a kotlin hello
flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -a java hello
flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -i objc hello
flutter create --org com.example --template=plugin --platforms=android,ios,linux,macos,windows -i swift hello

這會在 hello 資料夾中建立一個外掛專案,其中包含下列特定內容

lib/hello.dart
外掛的 Dart API。
android/src/main/java/com/example/hello/HelloPlugin.kt
以 Kotlin 撰寫的外掛 API 之 Android 平台特定實作。
ios/Classes/HelloPlugin.m
以外掛 API 的 Objective-C 撰寫的 iOS 平台特定實作。
example/
一個依賴外掛並說明如何使用它的 Flutter 應用程式。

步驟 2:實作套件

#

由於外掛套件包含多個以多種程式語言撰寫的平台的程式碼,因此需要一些特定的步驟來確保順暢的體驗。

步驟 2a:定義套件 API (.dart)

#

外掛套件的 API 是在 Dart 程式碼中定義的。在您最喜愛的 Flutter 編輯器中開啟主要的 hello/ 資料夾。找到檔案 lib/hello.dart

步驟 2b:新增 Android 平台程式碼 (.kt/.java)

#

我們建議您使用 Android Studio 編輯 Android 程式碼。

在 Android Studio 中編輯 Android 平台程式碼之前,請先確定程式碼已建構至少一次(換句話說,從您的 IDE/編輯器執行範例應用程式,或在終端機中執行 cd hello/example; flutter build apk --config-only)。

然後使用下列步驟

  1. 啟動 Android Studio。
  2. Welcome to Android Studio 對話方塊中,選取 Open an existing Android Studio Project,或從選單中選取 File > Open,然後選取 hello/example/android/build.gradle 檔案。
  3. Gradle Sync 對話方塊中,選取 OK
  4. Android Gradle Plugin 更新對話框中,選取不要再提醒我這個專案

您的外掛程式的 Android 平台程式碼位於 hello/java/com.example.hello/HelloPlugin

您可以按下執行 (▶) 按鈕,從 Android Studio 執行範例應用程式。

步驟 2c:新增 iOS 平台程式碼 (.swift/.h+.m)

#

我們建議您使用 Xcode 編輯 iOS 程式碼。

在 Xcode 中編輯 iOS 平台程式碼之前,請先確保程式碼已至少建置一次(換句話說,從您的 IDE/編輯器執行範例應用程式,或在終端機中執行 cd hello/example; flutter build ios --no-codesign --config-only)。

然後使用下列步驟

  1. 啟動 Xcode。
  2. 選取檔案 > 開啟,然後選取 hello/example/ios/Runner.xcworkspace 檔案。

您的外掛程式的 iOS 平台程式碼位於專案導覽器中的 Pods/Development Pods/hello/../../example/ios/.symlinks/plugins/hello/ios/Classes。(如果您使用 sharedDarwinSource,路徑會以 hello/darwin/Classes 結尾。)

您可以按下執行 (▶) 按鈕來執行範例應用程式。

新增 CocoaPod 相依性
#

使用下列指示新增版本為 0.0.1HelloPod

  1. ios/hello.podspec 的結尾指定相依性

    ruby
    s.dependency 'HelloPod', '0.0.1'

    對於私有 pod,請參閱 私有 CocoaPods,以確保存放庫存取權

    ruby
    s.source = {
        # For pods hosted on GitHub
        :git => "https://github.com/path/to/HelloPod.git",
        # Alternatively, for pods hosted locally
        # :path => "file:///path/to/private/repo",
        :tag => s.version.to_s
      }`
  1. 安裝外掛程式

    • 在外掛程式專案的 pubspec.yaml 相依性中新增外掛程式。
    • 執行 flutter pub get
    • 在外掛程式專案的 ios/ 目錄中,執行 pod install

該 pod 應該會出現在安裝摘要中。

如果您的外掛程式需要隱私權清單,例如,如果它使用了任何必要原因 API,請更新 PrivacyInfo.xcprivacy 檔案以描述您的外掛程式的隱私權影響,並將以下內容新增至您的 podspec 檔案底部

ruby
s.resource_bundles = {'your_plugin_privacy' => ['your_plugin/Sources/your_plugin/Resources/PrivacyInfo.xcprivacy']}

如需更多資訊,請查看 Apple 開發人員網站上的 隱私權清單檔案

步驟 2d:新增 Linux 平台程式碼 (.h+.cc)

#

我們建議您使用具有 C++ 整合的 IDE 編輯 Linux 程式碼。以下說明適用於安裝了「C/C++」和「CMake」擴充功能的 Visual Studio Code,但可以針對其他 IDE 進行調整。

在 IDE 中編輯 Linux 平台程式碼之前,請先確保程式碼已至少建置一次(換句話說,從您的 Flutter IDE/編輯器執行範例應用程式,或在終端機中執行 cd hello/example; flutter build linux)。

然後使用下列步驟

  1. 啟動 Visual Studio Code。
  2. 開啟 hello/example/linux/ 目錄。
  3. 在提示詢問:「您想要設定專案 'linux' 嗎?」時,選擇。這會允許 C++ 自動完成功能正常運作。

您的外掛程式的 Linux 平台程式碼位於 flutter/ephemeral/.plugin_symlinks/hello/linux/

您可以使用 flutter run 執行範例應用程式。注意:在 Linux 上建立可執行的 Flutter 應用程式需要一些屬於 flutter 工具一部分的步驟,因此即使您的編輯器提供 CMake 整合,以該方式建置和執行也無法正確運作。

步驟 2e:新增 macOS 平台程式碼 (.swift)

#

我們建議您使用 Xcode 編輯 macOS 程式碼。

在 Xcode 中編輯 macOS 平台程式碼之前,請先確保程式碼已至少建置一次(換句話說,從您的 IDE/編輯器執行範例應用程式,或在終端機中執行 cd hello/example; flutter build macos --config-only)。

然後使用下列步驟

  1. 啟動 Xcode。
  2. 選取檔案 > 開啟,然後選取 hello/example/macos/Runner.xcworkspace 檔案。

您的外掛程式的 macOS 平台程式碼位於專案導覽器中的 Pods/Development Pods/hello/../../example/macos/Flutter/ephemeral/.symlinks/plugins/hello/macos/Classes。(如果您使用 sharedDarwinSource,路徑會以 hello/darwin/Classes 結尾。)

您可以按下執行 (▶) 按鈕來執行範例應用程式。

步驟 2f:新增 Windows 平台程式碼 (.h+.cpp)

#

我們建議您使用 Visual Studio 編輯 Windows 程式碼。

在 Visual Studio 中編輯 Windows 平台程式碼之前,請先確保程式碼已至少建置一次(換句話說,從您的 IDE/編輯器執行範例應用程式,或在終端機中執行 cd hello/example; flutter build windows)。

然後使用下列步驟

  1. 啟動 Visual Studio。
  2. 選取開啟專案或方案,然後選取 hello/example/build/windows/hello_example.sln 檔案。

您的外掛程式的 Windows 平台程式碼位於方案總管中的 hello_plugin/Source Fileshello_plugin/Header Files

您可以藉由在方案總管中按一下滑鼠右鍵點選 hello_example 並選取設定為啟始專案,然後按下執行 (▶) 按鈕來執行範例應用程式。重要:變更外掛程式程式碼後,您必須選取建置 > 建置方案,然後才能再次執行,否則將會執行外掛程式的舊版本,而不是包含您變更的最新版本。

步驟 2g:連結 API 和平台程式碼

#

最後,您需要將 Dart 程式碼中編寫的 API 與特定平台的實作連結起來。這可以使用平台通道完成,或透過平台介面套件中定義的介面完成。

在現有的外掛程式專案中新增平台支援

#

若要將特定平台的支援新增至現有的外掛程式專案,請再次在專案目錄中使用 --template=plugin 旗標執行 flutter create。例如,若要在現有的外掛程式中新增 Web 支援,請執行

flutter create --template=plugin --platforms=web .

如果此命令顯示有關更新 pubspec.yaml 檔案的訊息,請依照提供的指示操作。

Dart 平台實作

#

在許多情況下,非 Web 平台的實作只會使用特定平台的實作語言,如上所示。但是,平台實作也可以使用特定平台的 Dart。

僅限 Dart 的平台實作

#

在某些情況下,某些平台可以完全在 Dart 中實作(例如,使用 FFI)。對於 Web 以外平台上的僅限 Dart 的平台實作,請以 dartPluginClass 取代 pubspec.yaml 中的 pluginClass。以下是針對僅限 Dart 實作修改的上述 hello_windows 範例

yaml
flutter:
  plugin:
    implements: hello
    platforms:
      windows:
        dartPluginClass: HelloPluginWindows

在此版本中,您將沒有 C++ Windows 程式碼,而是會以 HelloPluginWindows 類別對 hello 外掛程式的 Dart 平台介面類別進行子類別化,其中包含靜態 registerWith() 方法。此方法會在啟動期間呼叫,可用於註冊 Dart 實作

dart
class HelloPluginWindows extends HelloPluginPlatform {
  /// Registers this class as the default instance of [HelloPluginPlatform].
  static void registerWith() {
    HelloPluginPlatform.instance = HelloPluginWindows();
  }

混合平台實作

#

平台實作也可以同時使用 Dart 和特定平台的語言。例如,外掛程式可以為每個平台使用不同的平台通道,以便可以針對每個平台自訂通道。

混合實作會使用上述的兩個註冊系統。以下是針對混合實作修改的上述 hello_windows 範例

yaml
flutter:
  plugin:
    implements: hello
    platforms:
      windows:
        dartPluginClass: HelloPluginWindows
        pluginClass: HelloPlugin

Dart HelloPluginWindows 類別會針對僅限 Dart 的實作使用上述的 registerWith(),而 C++ HelloPlugin 類別則會與僅限 C++ 的實作相同。

測試你的外掛

#

我們建議您使用自動化測試來測試外掛程式,以確保當您變更程式碼時,功能不會退步。

若要深入瞭解如何測試外掛程式,請查看測試外掛程式。如果您正在撰寫 Flutter 應用程式的測試,並且外掛程式導致當機,請查看外掛程式中的 Flutter 測試

開發 FFI 外掛套件

#

如果您想要開發使用 Dart 的 FFI 呼叫原生 API 的套件,則需要開發 FFI 外掛程式套件。

FFI 外掛程式套件和非 FFI 外掛程式套件都支援搭售原生程式碼。但是,FFI 外掛程式套件不支援方法通道,但支援方法通道註冊程式碼。若要實作同時使用方法通道 FFI 的外掛程式,請使用非 FFI 外掛程式。每個平台可以使用 FFI 或非 FFI 平台。

步驟 1:建立套件

#

若要建立啟動器 FFI 外掛程式套件,請搭配 flutter create 使用 --template=plugin_ffi 旗標

flutter create --template=plugin_ffi hello

這會在 hello 資料夾中建立一個具有下列特殊內容的 FFI 外掛程式專案

lib:定義外掛程式 API 的 Dart 程式碼,以及使用 dart:ffi 呼叫原生程式碼的程式碼。

src:原生原始碼,以及用於將該原始碼建置到動態程式庫的 CMakeLists.txt 檔案。

平台資料夾androidioswindows 等):用於建置和搭售具有平台應用程式的原生程式碼程式庫的建置檔案。

步驟 2:建構和綑綁原生程式碼

#

pubspec.yaml 如下所示指定 FFI 外掛程式

yaml
  plugin:
    platforms:
      some_platform:
        ffiPlugin: true

此設定會針對各種目標平台叫用原生建置,並使用這些 FFI 外掛程式搭售 Flutter 應用程式中的二進位檔。

這可以與 dartPluginClass 結合使用,例如當 FFI 用於聯合外掛程式中一個平台的實作時

yaml
  plugin:
    implements: some_other_plugin
    platforms:
      some_platform:
        dartPluginClass: SomeClass
        ffiPlugin: true

外掛程式可以同時具有 FFI 和方法通道

yaml
  plugin:
    platforms:
      some_platform:
        pluginClass: SomeName
        ffiPlugin: true

由 FFI(和方法通道)外掛程式叫用的原生建置系統如下

  • 對於 Android:Gradle,會針對原生建置叫用 Android NDK。
    • 請參閱 android/build.gradle 中的文件。
  • 對於 iOS 和 macOS:Xcode,使用 CocoaPods。
    • 請參閱 ios/hello.podspec 中的文件。
    • 請參閱 macos/hello.podspec 中的文件。
  • 對於 Linux 和 Windows:CMake。
    • 請參閱 linux/CMakeLists.txt 中的文件。
    • 請參閱 windows/CMakeLists.txt 中的文件。

步驟 3:綁定到原生程式碼

#

若要使用原生程式碼,需要 Dart 中的繫結。

若要避免手動撰寫這些程式碼,它們會由 package:ffigen 從標頭檔案 (src/hello.h) 產生。請參閱 ffigen 文件,以取得如何安裝此套件的資訊。

執行以下程式碼來重新產生繫結

 dart run ffigen --config ffigen.yaml

步驟 4:呼叫原生程式碼

#

可以從任何隔離區直接叫用執行時間非常短的原生函式。如需範例,請參閱 lib/hello.dart 中的 sum

應該在協助程式隔離區上叫用執行時間較長的函式,以避免在 Flutter 應用程式中丟失影格。如需範例,請參閱 lib/hello.dart 中的 sumAsync

加入文件

#

建議的做法是將下列文件新增至所有套件

  1. 介紹套件的 README.md 檔案
  2. 記錄每個版本變更的 CHANGELOG.md 檔案
  3. 包含授權套件條款的 LICENSE 檔案
  4. 所有公開 API 的 API 文件(請參閱下方詳細資訊)

API 文件

#

當您發佈套件時,API 文件會自動產生並發佈至 pub.dev/documentation。例如,請參閱 device_info_plus 的文件。

如果您想要在本機開發機器上產生 API 文件,請使用下列命令

  1. 將目錄變更為您的套件所在位置

    cd ~/dev/mypackage
  2. 告知文件工具 Flutter SDK 的位置(請變更以下命令以反映您放置它的位置)

       export FLUTTER_ROOT=~/dev/flutter  # on macOS or Linux
    
       set FLUTTER_ROOT=~/dev/flutter     # on Windows
  3. 執行 `dart doc` 工具(包含在 Flutter SDK 中),如下所示
       $FLUTTER_ROOT/bin/cache/dart-sdk/bin/dart doc   # on macOS or Linux
    
       %FLUTTER_ROOT%\bin\cache\dart-sdk\bin\dart doc  # on Windows

如需如何撰寫 API 文件的提示,請參閱有效的 Dart 文件

將授權加入 LICENSE 檔案

#

每個 LICENSE 檔案內的個別授權應以單獨一行上的 80 個連字號分隔。

如果 LICENSE 檔案包含多個元件授權,則每個元件授權都必須以該元件授權所適用的套件名稱開始,每個套件名稱各佔一行,並且套件名稱列表與實際授權文字之間以空白行分隔。(套件名稱不一定要與 pub 套件的名稱相符。例如,一個套件本身可能包含來自多個第三方來源的程式碼,並且可能需要包含每個來源的授權。)

以下範例顯示一個組織良好的授權檔案

package_1

<some license text>

--------------------------------------------------------------------------------
package_2

<some license text>

以下是另一個組織良好的授權檔案範例

package_1

<some license text>

--------------------------------------------------------------------------------
package_1
package_2

<some license text>

以下是一個組織不佳的授權檔案範例

<some license text>

--------------------------------------------------------------------------------
<some license text>

另一個組織不佳的授權檔案範例

package_1

<some license text>
--------------------------------------------------------------------------------
<some license text>

發佈你的套件

#

一旦您實作了套件,您就可以在 pub.dev 上發佈它,以便其他開發人員可以輕鬆使用它。

在發佈之前,請務必檢查 pubspec.yamlREADME.mdCHANGELOG.md 檔案,以確保它們的內容完整且正確。此外,為了提高您套件的品質和可用性(並使其更有可能獲得 Flutter 最愛的地位),請考慮加入以下項目

  • 多樣化的程式碼使用範例
  • 螢幕截圖、動畫 GIF 或影片
  • 指向對應程式碼儲存庫的連結

接下來,以 dry-run 模式執行發佈命令,以查看所有內容是否通過分析

flutter pub publish --dry-run

下一步是發佈到 pub.dev,但請確保您已準備好,因為發佈是永久的

flutter pub publish

有關發佈的更多詳細資訊,請參閱 dart.dev 上的 發佈文件

處理套件之間的相依性

#

如果您正在開發一個名為 hello 的套件,該套件依賴於另一個套件公開的 Dart API,您需要將該套件新增到 pubspec.yaml 檔案的 dependencies 區段。以下程式碼使 url_launcher 外掛程式的 Dart API 可供 hello 使用

yaml
dependencies:
  url_launcher: ^5.0.0

您現在可以在 hello 的 Dart 程式碼中 import 'package:url_launcher/url_launcher.dart'launch(someUrl)

這與您在 Flutter 應用程式或任何其他 Dart 專案中包含套件的方式沒有任何不同。

但是,如果 hello 碰巧是一個外掛程式套件,其平台特定程式碼需要存取 url_launcher 公開的平台特定 API,您還需要將適當的相依性宣告新增到您的平台特定建置檔案中,如下所示。

Android

#

以下範例在 hello/android/build.gradle 中設定 url_launcher 的相依性

groovy
android {
    // lines skipped
    dependencies {
        compileOnly rootProject.findProject(":url_launcher")
    }
}

您現在可以在 hello/android/src 的原始碼中 import io.flutter.plugins.urllauncher.UrlLauncherPlugin 並存取 UrlLauncherPlugin 類別。

有關 build.gradle 檔案的更多資訊,請參閱有關建置指令碼的 Gradle 文件

iOS

#

以下範例在 hello/ios/hello.podspec 中設定 url_launcher 的相依性

ruby
Pod::Spec.new do |s|
  # lines skipped
  s.dependency 'url_launcher'

您現在可以在 hello/ios/Classes 的原始碼中 #import "UrlLauncherPlugin.h" 並存取 UrlLauncherPlugin 類別。

有關 .podspec 檔案的更多詳細資訊,請參閱 CocoaPods 文件

Web

#

所有網頁相依性都由 pubspec.yaml 檔案處理,就像任何其他 Dart 套件一樣。