1. 程式人生 > >【Flutter 混合開發】與原生通訊-BasicMessageChannel

【Flutter 混合開發】與原生通訊-BasicMessageChannel

![](https://img2020.cnblogs.com/other/467322/202010/467322-20201022065958023-166951808.png) > Flutter 混合開發系列 包含如下: > - 嵌入原生View-Android > - 嵌入原生View-iOS > - 與原生通訊-MethodChannel > - **與原生通訊-BasicMessageChannel** > - 與原生通訊-EventChannel > - 新增 Flutter 到 Android Activity > - 新增 Flutter 到 Android Fragment > - 新增 Flutter 到 iOS > > 每個工作日分享一篇,歡迎關注、點贊及轉發。 ### 平臺通訊的3中方式 Flutter 與 Native 端通訊有如下3個方法: - **MethodChannel**:Flutter 與 Native 端相互呼叫,呼叫後可以返回結果,可以 Native 端主動呼叫,也可以Flutter主動呼叫,屬於雙向通訊。此方式為最常用的方式, Native 端呼叫需要在主執行緒中執行。 - **BasicMessageChannel**:用於使用指定的編解碼器對訊息進行編碼和解碼,屬於雙向通訊,可以 Native 端主動呼叫,也可以Flutter主動呼叫。 - **EventChannel**:用於資料流(event streams)的通訊, Native 端主動傳送資料給 Flutter,通常用於狀態的監聽,比如網路變化、感測器資料等。 ### Flutter 端 Flutter 端建立 **MethodChannel** 通道,用於與原生端通訊: ```dart var channel = BasicMessageChannel('com.flutter.guide.BasicMessageChannel',StandardMessageCodec()); ``` **com.flutter.guide.BasicMessageChannel** 是 BasicMessageChannel 的名稱,原生端要與之對應。 傳送訊息: ```dart var result = await channel.send({'name': 'laomeng', 'age': 18}); ``` - 引數型別任意,多個引數通常使用**Map**。 - 返回 **Future**,原生端返回的資料。 完整程式碼: ```dart class BasicMessageChannelDemo extends StatefulWidget { @override _BasicMessageChannelDemoState createState() => _BasicMessageChannelDemoState(); } class _BasicMessageChannelDemoState exten