包介紹

#

包支援建立可輕鬆共享的模組化程式碼。一個最小化的包包含以下內容:

pubspec.yaml
一個元資料檔案,宣告包的名稱、版本、作者等。
lib
lib 目錄包含包的公共程式碼,最少包含一個 <package-name>.dart 檔案。

包的型別

#

包可以包含多種型別的內容

Dart 包

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

外掛包

一種專門的 Dart 包,包含用 Dart 程式碼編寫的 API,以及一個或多個特定於平臺的實現。

外掛包可以為 Android(使用 Kotlin 或 Java)、iOS(使用 Swift 或 Objective-C)、Web、macOS、Windows 或 Linux 編寫,或它們的任意組合。

一個具體的例子是 url_launcher 外掛包。要了解如何使用 url_launcher 包,以及如何擴充套件它以支援 Web,請參閱 Harry Terkelsen 的 Medium 文章 如何編寫 Flutter Web 外掛,第一部分

FFI 外掛包

一種專門的 Dart 包,包含用 Dart 程式碼編寫的 API,以及一個或多個使用 Dart FFI 的特定平臺實現(AndroidiOSmacOS)。

開發 Dart 包

#

以下說明將解釋如何編寫 Flutter 包。

步驟 1:建立包

#

要建立入門級的 Flutter 包,請在 flutter create 命令中使用 --template=package 標誌。

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/<package name>.dart 檔案中新增功能,或在 lib 目錄的多個檔案中新增。

要測試該包,請在 test 目錄中新增 單元測試

有關如何組織包內容的更多詳細資訊,請參閱 Dart 庫包 文件。

開發外掛包

#

如果你想開發一個呼叫平臺特定 API 的包,你需要開發一個外掛包。

API 使用 平臺通道 連線到特定平臺的實現。

聯邦外掛

#

聯邦外掛是將不同平臺的支援拆分到單獨的包中的一種方式。因此,一個聯邦外掛可以為 iOS 使用一個包,為 Android 使用另一個包,為 Web 使用另一個包,再為汽車(作為 IoT 裝置的一個例子)使用另一個包。除其他好處外,這種方法允許領域專家擴充套件現有外掛以適用於他們最瞭解的平臺。

聯邦外掛需要以下包:

面向應用的包
外掛使用者依賴以使用外掛的包。此包指定了 Flutter 應用使用的 API。
平臺包
一個或多個包含特定平臺實現程式碼的包。面向應用的包呼叫這些包——它們不會包含在應用中,除非它們包含終端使用者可訪問的特定平臺功能。
平臺介面包
將面向應用的包與平臺包粘合在一起的包。此包宣告一個介面,任何平臺包都必須實現該接口才能支援面向應用的包。擁有一個定義此介面的包可確保所有平臺包以統一的方式實現相同的功能。

推薦的聯邦外掛

#

理想情況下,當向聯邦外掛新增平臺實現時,您將與包作者協調以包含您的實現。這樣,原始作者會推薦您的實現。

例如,假設你為(虛構的)foobar 外掛編寫了一個 foobar_windows 實現。在一個推薦的外掛中,原始的 foobar 作者會將你的 Windows 實現新增為面向應用的包的 pubspec 的依賴項。然後,當開發者將 foobar 外掛包含在他們的 Flutter 應用中時,Windows 實現以及其他推薦的實現將自動提供給應用。

未推薦的聯邦外掛

#

如果你因為任何原因無法獲得你的實現被原始外掛作者新增,那麼你的外掛就不是推薦的。開發者仍然可以使用你的實現,但必須手動將該外掛新增到應用的 pubspec.yaml 檔案中。

yaml
dependencies:
  foobar: ^1.0.0
  foobar_windows: ^1.0.0 # Non-endorsed plugin implementation

此方法也適用於覆蓋 foobar 已推薦的外掛實現。

有關聯邦外掛的更多資訊,它們為何有用,以及如何實現它們,請參閱 Harry Terkelsen 的 Medium 文章 如何編寫 Flutter Web 外掛,第二部分

指定外掛支援的平臺

#

外掛可以透過向 pubspec.yaml 檔案中的 platforms map 新增鍵來指定它們支援的平臺。例如,以下 pubspec 檔案顯示了 hello 外掛的 flutter: map,它僅支援 iOS 和 Android:

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

新增更多平臺的外掛實現時,應相應地更新 platforms map。例如,當更新以新增對 macOS 和 Web 的支援時,hello 外掛的 pubspec 檔案中的 map 如下所示:

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: map:

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

推薦的實現

#

面向應用的包可以透過新增對平臺包的依賴項,並將其包含在 platforms: map 的 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 實現

#

許多框架同時支援 iOS 和 macOS,具有相同或幾乎相同的 API,因此有可能使用相同的程式碼庫為 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 和 macOS 將使用一個共享的 darwin 資料夾來存放所有程式碼和資源,而不是各自的 iosmacos 目錄。啟用此選項時,你需要將 iosmacos 中的任何現有檔案移到共享目錄。你還需要更新 podspec 檔案以設定兩個平臺的依賴項和部署目標,例如:

ruby
  s.ios.dependency 'Flutter'
  s.osx.dependency 'FlutterMacOS'
  s.ios.deployment_target = '13.0'
  s.osx.deployment_target = '10.15'

步驟 1:建立包

#

要建立外掛包,請在 flutter create 命令中使用 --template=plugin 標誌。

使用 --platforms= 選項後跟逗號分隔的列表,指定外掛支援的平臺。可用平臺包括:androidiosweblinuxmacoswindows。如果未指定平臺,則生成的專案不支援任何平臺。

使用 --org 選項,以反向域名錶示法指定你的組織。此值用於生成外掛程式碼中的各種包和捆綁包識別符號。

預設情況下,外掛專案對 iOS 程式碼使用 Swift,對 Android 程式碼使用 Kotlin。如果你偏好 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
Objective-C 語言的外掛 API 的 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. 在“歡迎使用 Android Studio”對話方塊中選擇“開啟現有的 Android Studio 專案”,或從選單中選擇“檔案 > 開啟”,然後選擇 hello/example/android/build.gradle 檔案。
  3. 在“Gradle 同步”對話方塊中,選擇“確定”。
  4. 在“Android Gradle 外掛更新”對話方塊中,選擇“對此專案不再提醒”。

外掛的 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 與特定平臺的實現連線起來。這透過 平臺通道 或透過平臺介面包中定義的介面來完成。

為現有外掛專案新增平臺支援

#

要為現有外掛專案新增對特定平臺的支援,請在專案目錄中再次執行 flutter create 命令,並附帶 --template=plugin 標誌。例如,要為現有外掛新增 Web 支援,請執行:

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

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

Dart 平臺實現

#

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

純 Dart 平臺實現

#

在某些情況下,某些平臺可以完全用 Dart 實現(例如,使用 FFI)。對於非 Web 平臺以外的平臺的純 Dart 實現,請將 pubspec.yaml 中的 pluginClass 替換為 dartPluginClass。以下是上面 hello_windows 示例修改為純 Dart 實現的情況:

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

在這種版本中,你將沒有 C++ Windows 程式碼,而是將 hello 外掛的 Dart 平臺介面類子類化為一個名為 HelloPluginWindows 的類,該類包含一個靜態的 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:ffi 呼叫原生程式碼的 Dart 程式碼。

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 中的繫結。

為了避免手動編寫這些繫結,它們是從標頭檔案(src/hello.h)由 package:ffigen 生成的。有關如何安裝此包的資訊,請參考 ffigen 文件

要重新生成繫結,請執行以下命令:

dart run ffigen --config ffigen.yaml

步驟 4:呼叫原生程式碼

#

非常短的本地函式可以直接從任何 isolate 呼叫。有關示例,請參閱 lib/hello.dart 中的 sum

較長的函式應在 輔助 isolate 上呼叫,以避免在 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 文件的技巧,請參閱 Effective Dart Documentation

向 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 Favorites 的狀態),請考慮包含以下專案:

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

接下來,在 dry-run 模式下執行 publish 命令,檢視是否所有分析都透過:

flutter pub publish --dry-run

下一步是釋出到 pub.dev,但請確保你已準備好,因為釋出是永久性的

flutter pub publish

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

處理包的相互依賴關係

#

如果你正在開發一個依賴於另一個包暴露的 Dart API 的 hello 包,你需要將該包新增到 pubspec.yaml 檔案的 dependencies 部分。下面的程式碼使 url_launcher 外掛的 Dart API 對 hello 可用:

yaml
dependencies:
  url_launcher: ^6.3.2

現在你可以在 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

#

所有 Web 依賴項都由 pubspec.yaml 檔案處理,就像其他 Dart 包一樣。