Just My Life & My Work

[Flutter] Package 與 Plugin

平常寫 Flutter App,我都會稱第三方套件為 Package,隱約曉得 Package 又可細分有無跟平台相依的套件。後來去了解後,才知道原來是有區分為 Package 與 Plugin。

翻成中文:

  • Package:套件
  • Plugin:外掛

.

在 Flutter(或 Dart)中,PackagePlugin 雖然常常被混用,但實際上有明確的區別:


🔹 Package(套件)

純 Dart 程式碼撰寫,不依賴原生平台功能(iOS/Android)

  • 完全使用 Dart 語言開發
  • 可以在任何支援 Dart 的平台上使用(Web、Mobile、Desktop)
  • 沒有與平台特定 API 的互動(如相機、藍牙、感測器)

📦 例如:
dependencies:
http: ^1.0.0

用來發送 HTTP 請求的套件,完全用 Dart 實作。

🔹 Plugin(外掛)

結合 Dart + 原生平台程式碼(Java/Kotlin for Android, Objective-C/Swift for iOS)

  • 提供存取裝置硬體或平台功能的橋接(Platform Channels)
  • Flutter 中 Dart 程式碼會呼叫 Android/iOS 的原生實作
  • 必須依賴特定平台的功能,通常不能在 Web 或 Desktop 使用

🔌 例如:

dependencies:
camera: ^0.10.5

使用手機的相機,需要原生平台支援,這就是 plugin。

✅ 總結比較:

特性PackagePlugin
用途通用邏輯、工具函式、UI 元件存取原生平台功能(存取相機、麥克風、感測器、檔案系統、平臺原生功能)
實作語言只用 DartDart + 原生語言(Kotlin/Java、Swift/Obj-C、C++ 等)
相容平台幾乎所有支持 Dart 的平台只限支援該原生功能的平台
依賴原生端

Package:純 Dart,快速引入、跨平臺一致

Plugin:Dart + 原生,橋接系統能力

根據專案需求選擇合適類型,才能兼顧開發效率與功能完整性。

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲