【Flutter 混合開發】與原生通訊-BasicMessageChannel
阿新 • • 發佈:2020-10-22
![](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