平常寫 Flutter App,我都會稱第三方套件為 Package,隱約曉得 Package 又可細分有無跟平台相依的套件。後來去了解後,才知道原來是有區分為 Package 與 Plugin。
翻成中文:
- Package:套件
- Plugin:外掛
.
在 Flutter(或 Dart)中,Package 和 Plugin 雖然常常被混用,但實際上有明確的區別:
🔹 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。
✅ 總結比較:
| 特性 | Package | Plugin |
|---|---|---|
| 用途 | 通用邏輯、工具函式、UI 元件 | 存取原生平台功能(存取相機、麥克風、感測器、檔案系統、平臺原生功能) |
| 實作語言 | 只用 Dart | Dart + 原生語言(Kotlin/Java、Swift/Obj-C、C++ 等) |
| 相容平台 | 幾乎所有支持 Dart 的平台 | 只限支援該原生功能的平台 |
| 依賴原生端 | ❌ | ✅ |
Package:純 Dart,快速引入、跨平臺一致
Plugin:Dart + 原生,橋接系統能力
根據專案需求選擇合適類型,才能兼顧開發效率與功能完整性。

隨意留個言吧:)~