【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】
今天,我們很高興地宣布 [Flutter Plugin 作者的早期體驗計劃](https://docs.google.com/forms/d/e/1FAIpQLScSSBAb0sKsrCFJhXnxbhUWx7bdFbuDqWps5C24KIXdD7E-_Q/viewform?usp=header),他們準備利用程式碼生成解決方案建立/重建 Plugin。這是我們透過使用 FFIgen 和 JNIgen,使 Flutter 開發人員更容易存取原生平台 API 的工作的下一階段開發。只有有限的名額可供申請,提供給那些準備在第一波生產級 Plugin 中直接與我們合作使用 FFIgen 和 JNIgen 的作者。
這篇部落格文章涵蓋了更多關於我們希望透過直接原生互操作性實現什麼,我們計劃如何實現,以及更多關於早期體驗計劃以及如何加入我們旅程的資訊。
根本挑戰
開發人員經常需要呼叫在應用程式運行的主機平台(如 iOS 或 Android)上原生的 API。目前,Flutter 開發人員可以使用 Method Channel 來實現。Method Channel 依賴於 Dart 程式碼和原生程式碼(如 Kotlin 或 Swift)之間的訊息傳遞來呼叫原生 API。也就是說,Dart 程式碼向原生程式碼發送訊息,原生程式碼執行一些操作,然後透過訊息傳回結果來回應。
Method Channel 的根本挑戰在於它們可能很耗時且難以維護。它們需要大量手寫程式碼。維護需要手動更新其實作以呼叫最新的 API 版本。它們也很容易出錯,因為它們依賴於將訊息編碼和解碼為字串,如果 API 改變,這可能會導致執行時錯誤。最後,Method Channel 只支援非同步呼叫,這確保了 UI 保持響應,但可能會增加程式碼的複雜性,包括管理非同步結果、處理錯誤以及處理等待結果時可能出現的延遲。
我們已經透過 [Pigeon](https://pub.dev/packages/pigeon) 解決了使用 Method Channel 的一些痛點,Pigeon 是一個用於為 Dart 和原生 API 生成骨架程式碼的工具,用於處理您本來會手動使用 Method Channel 撰寫的訊息。雖然 Pigeon 減少了包裝方法和撰寫 Dart 和原生程式碼之間訊息處理程式的時間,但具有大型 API 表面積的 API 仍然需要撰寫繁瑣的程式碼。例如,iOS 的應用程式內購 Plugin 與許多 StoreKit 物件互動,由於它們嵌套在其他原生物件中,因此需要大量手動編碼才能將它們轉換為 Objective-C 端的 Pigeon 可序列化類別,並將這些 Pigeon 類別轉換回 Dart 端的包裝類別。
此外,兩個 Plugin 之間的互操作性是一個挑戰,沒有辦法將非序列化物件(例如 Android Image)透過 Dart 傳遞給另一個 Plugin,而無需它們彼此相依。
Flutter 對互操作性的願景
正如 Michael Thompson 在 #FlutterInProduction 期間所說,「我們正在投入大量精力來開發一種新的方法,我們稱之為直接原生互操作。」
我們對互操作性的願景是最終透過簡單且無縫的開發人員體驗,使開發人員更容易存取平台 API。目標是讓 Flutter 開發人員花更多時間關注他們正在嘗試建立的體驗,而減少花時間嘗試利用底層平台的力量。
解決方案
我們計劃透過稱為 FFIgen 和 JNIgen 的程式碼生成解決方案來解決根本的互操作性挑戰,這些解決方案直接處理 Dart 和每個平台的原生程式碼之間的橋接。FFIgen 將生成綁定以包裝 Objective-C 和 Swift API,而 JNIgen 也將以類似的方式為 Java 和 Kotlin API 進行。
與 Method Channel 不同,FFIgen 和 JNIgen 將使 API 能夠同步呼叫,支援樹狀抖動(編譯期間移除未使用的程式碼),並允許更多資料存放在平台層。
理想使用者
在此早期階段,新直接互操作性的理想使用者是對原生平台(iOS、Android 或兩者)有深入了解的 Flutter 開發人員,他們非常渴望更直接且更省力地存取他們需要的任何平台 API。透過 FFIgen 和 JNIgen,他們可以顯著減少將 Dart 與原生平台程式碼橋接的時間,並更容易建立和維護生態系統的 Plugin。
隨著工具隨著時間變得更加強大,我們想像任何熟悉原生平台的 Flutter 開發人員都能夠存取任何平台 API(例如尚無法在 Flutter 中生產或透過 pub.dev 上的套件取得的 API),以生成他們所需的程式碼,以便直接在 Flutter 應用程式中呼叫 Dart 程式碼。
我們希望透過簡化的開發人員體驗來實現比現有解決方案顯著更好的解決方案 - 在正確的地方具有魔力,同時又不迫使開發人員放棄控制。
加入互操作早期體驗計劃
我們正在尋找在建立 Flutter Plugin 和使用 Flutter 工具方面經驗豐富的候選人,以嘗試早期體驗計劃,您將重寫現有的 Plugin 以使用直接互操作,並提供詳細的意見回饋和問題來指導未來的開發。與任何預覽計劃一樣,過程中難免會有粗糙之處,但我們已準備好提供支援和早期存取權限,以克服您遇到的任何障礙。
請透過 [填寫此表單](https://docs.google.com/forms/d/e/1FAIpQLScSSBAb0sKsrCFJhXnxbhUWx7bdFbuDqWps5C24KIXdD7E-_Q/viewform?usp=header) 表達您的興趣。我們可能無法將所有申請此早期計劃的人都納入。選定的候選人將在 2025 年 6 月 20 日之後收到我們的通知。
我們期待收到您的來信!
Flutter 通往無縫互操作的道路 最初發佈在 Flutter 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。