Flutter 允許調用相關平台的API,無論是Android 中的Java 或Kotlin 代碼,還是iOS 中的Objective-C 或Swift 代碼
介紹的內容適用於大多數插件,有個例外是一些Web插件的實現是通過聯合插件的方式進行的,這一類插件不使用平台通道,可參考Flutter Web在美團外賣的實踐
Flutter 內建的platform-specific API 靈活的依賴於傳遞訊息的格式
Flutter 與 Native 端之間的通訊機制是通過 Platform Channel 來完成。訊息使用 Channel 在*Flutter端(UI)和Native端(平台)*進行傳遞,如下圖所示:
訊息和響應以異步的形式進行傳遞,以確保用戶界面能夠保持響應,圖中客戶端在調用方法的時候透過一種platform channel:MethodChannel
來負責響應動作並傳遞訊息,從平台的角度上,Android系統上使用的MethodChannel
( MethodChannelAndroid
)、 iOS系統使用的的MethodChannel
(MethodChanneliOS
),用來接收來自方法的調用,以及返回**result
**
如果需要,方法調用也可以反向發送,由平台充當客戶端來調用Dart 實現的方法。一個具體的例子是
quick_actions
插件
Flutter 定義了三種不同型別的Platform Channel 在platform_channel.dart
: