iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
Mobile Development

Flutter - 從 Packages & Plugins 掌握原生系列 第 5

Day05 platform channels

編寫自定義的平台相關程式碼(插件在不同平台的功能實作)

Flutter 允許調用相關平台的API,無論是Android 中的Java 或Kotlin 代碼,還是iOS 中的Objective-C 或Swift 代碼

介紹的內容適用於大多數插件,有個例外是一些Web插件的實現是通過聯合插件的方式進行的,這一類插件不使用平台通道,可參考Flutter Web在美團外賣的實踐

Flutter 內建的platform-specific API 靈活的依賴於傳遞訊息的格式

  • 應用程序中的Flutter 部分通過platform channel(平台通道)向其宿主 Native 端(應用程序中的iOS 或Android 部分)發送訊息
  • 宿主 Native 端監聽平台通道並接收消息。然後,它使用原生程式語言來調用任意數量的相關平台API,並將響應發送回客戶端(即應用程序中的Flutter 部分)
Architectural overview:platform channels(平台通道)

Flutter 與 Native 端之間的通訊機制是通過 Platform Channel 來完成。訊息使用 Channel 在*Flutter端(UI)Native端(平台)*進行傳遞,如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20210921/20118479AK9SLfL6Ii.png

訊息和響應以異步的形式進行傳遞,以確保用戶界面能夠保持響應,圖中客戶端在調用方法的時候透過一種platform channel:MethodChannel來負責響應動作並傳遞訊息,從平台的角度上,Android系統上使用的MethodChannelMethodChannelAndroid)、 iOS系統使用的的MethodChannelMethodChanneliOS),用來接收來自方法的調用,以及返回**result**

如果需要,方法調用也可以反向發送,由平台充當客戶端來調用Dart 實現的方法。一個具體的例子是quick_actions插件

Flutter 定義了三種不同型別的Platform Channel 在platform_channel.dart

  • BasicMessageChannel:用於傳遞字串或者半結構化的資訊,持續通訊,收到資訊後可以進行回覆
  • MethodChannel:用於傳遞方法呼叫,一次性通訊。通常用於 Dart 呼叫 Native 的方法
  • EventChannel:用於資料流的通訊,持續通訊,收到訊息後無法回覆此次訊息。通常用於 Native 向 Dart 的通訊

上一篇
Day04 指定插件所支援的平台
下一篇
Day06 Flutter 啟動流程
系列文
Flutter - 從 Packages & Plugins 掌握原生30

尚未有邦友留言

立即登入留言