Flutter 与原生通信主要分成 3 大类:
- Flutter Framework → 原生(上层到下层)通信
- 原生 → Flutter Framework(下层到上层)通信
- 共享渲染视图、共享引擎相关的交互
下面逐条展开。
----------------------------------
🎯一、官方通信方式(最核心的 3 种)
----------------------------------
这些是 Flutter 官方 Framework 提供的Platform Channels,最常用、最可靠。
1.MethodChannel(方法调用)——最常用
🔧使用场景:
- Flutter 主动调用原生方法(如打开相机、定位、获取系统信息)
- 原生回调一个值给 Flutter
📌特点:
- 单次请求-响应模型
- 传递 JSON 可序列化数据
finalmethodChannel=MethodChannel("demo/method");awaitmethodChannel.invokeMethod("getBattery");2.EventChannel(持续事件流)
🔧使用场景:
原生向 Flutter 持续输出数据
例如:
- 传感器数据
- 蓝牙扫描
- 网络状态变化
📌特点:
- 单向流(Native → Flutter)
- Flutter 无法向 Native 写入
3.BasicMessageChannel(双向任意数据,不限类型)
🔧使用场景:
- Flutter 与原生之间需要保持状态同步
- 需要发送复杂数据、频繁通信
📌特点:
- 双向通信
- 可自定义编解码器(String、JSON、Binary 等)
----------------------------------
🎯二、Pigeon(推荐的类型安全通信生成工具)
----------------------------------
Pigeon 不是通信方式,而是用来生成通信代码的工具。
它基于 MethodChannel,但优势是:
✔ 自动生成 Flutter & 原生(Java/Kotlin、ObjC/Swift)通信代码
✔ 完全类型安全
✔ 避免手写通道字符串
✔ 工程可维护性大提升
适用于:中大型项目、插件开发、复杂通信模型。
----------------------------------
🎯三、Flutter 原生层通信(Engine 层 / BinaryMessenger)
----------------------------------
官方 API 底层封装:
4.BinaryMessenger(底层通信接口)
BasicMessageChannel、MethodChannel 都基于 BinaryMessenger。
适合:
- 你想完全自定义消息格式
- 极致性能优化(如二进制序列化)
一般大项目或插件才会用。
5.PlatformView(原生 UI 嵌入 Flutter)
用 PlatformView 不仅是 UI,还隐含通信能力。
适合:
- 原生录屏控件
- 地图组件
- 视频播放器
- 大量原生手势/输入事件
⏩ 其内部依赖:
- 原生 View → Flutter texture
- MethodChannel 实现控制通信
6.Texture(共享纹理)
用于原生绘制图像 → Flutter 渲染
例如相机、视频流。
通信通常配合 MethodChannel。
----------------------------------
🎯四、混合栈场景通信(特别适合已有 Native App)
----------------------------------
7.FlutterBoost(阿里开源)
适合大公司、复杂混合栈,用于:
- 打开原生页面
- 打开 Flutter 页面
- 回传页面结果
- 生命周期同步
通信方式内置支持:
- MethodChannel
- EventChannel
- Custom channel
8.BoostChannel(FlutterBoost 内部增强)
用于多引擎、多页面通信。
9.原生多 FlutterEngine 通信
Android / iOS 支持多个 FlutterEngine 并行。
通信方式:
- EventChannel
- BasicMessageChannel
- 内存共享(极限方案)
适合:
- 一个 App 内多个 Flutter 模块
- 多引擎提高性能场景
----------------------------------
🎯五、其他底层扩展方式
----------------------------------
10.FIDL(Experimental)
Flutter 团队实验过的接口定义语言,比 Pigeon 更底层,但未正式推广。
11.通过 JNI / C++ 与 Flutter Engine 通信
如果有 C++ 层逻辑(如 VR、加密库),可:
Flutter ←(Channel)→ Android JNI ←→ C++
Flutter ←(Channel)→ iOS Objective-C++ ←→ C++
12.通过 Dart FFI → 原生 C/C++
最常用:
- 调用 C 动态库(.so / .dll / .dylib)
- 高性能数据处理(图像、加密、AI 模型)
⚠️ 不适用于直接调用 Objective-C/Swift/Java/Kotlin。
13.通过 Plugin(插件)体系
Flutter 插件本质上就是:
- Dart 层封装
- PlatformChannel 通信
- 原生实现
- 自动注册
所有官方插件都是这样实现的。
----------------------------------
🎯六、非官方 / 工程实践通信方式
----------------------------------
14.URL Scheme / Deep Link
Flutter → 原生
原生 → Flutter
都可利用 deep link 做页面跳转或数据回传。
缺点:不适合高频通信。
15.通过 Activity / ViewController 参数传递
混合开发常见:
- 启动 FlutterActivity 时传参
- 通过 FlutterEngine cache 传参
16.通过消息总线(如 EventBus)+ Channel 同步
Flutter 和原生共享某些事件模型。
17.Platform Intent(Android)
比如:
- Flutter 打开原生 Activity
- Intent 携带参数
18.iOS NotificationCenter
原生层 → Flutter 通常做桥接用。
----------------------------------
🎯七、真正意义上的“所有”方式总结
----------------------------------
| 方式 | 双向 | 类型安全 | 性能 | 场景 |
|---|---|---|---|---|
| MethodChannel | ✔ | ❌ | 中等 | 90% 通信方式 |
| EventChannel | ❌(单向) | ❌ | 高 | 传感器 / 流式数据 |
| BasicMessageChannel | ✔ | ❌ | 高 | 频繁通信、复杂数据 |
| Pigeon | ✔ | ✔ | 中等 | 企业级、中大型项目 |
| BinaryMessenger | ✔ | ✔ | 最高 | 自定义协议、插件开发 |
| PlatformView | ✔ | 中 | 中 | 地图、视频、相机 |
| Texture | ❌ | 高 | 高 | 视频帧、图像流 |
| FFI | ❌(只能 Flutter 调 C) | ✔ | 极高 | 算法、AI、加密 |
| 多引擎通信 | ✔ | ❌ | 高 | 大型混合栈 |
| 混合栈框架 Boost | ✔ | 中 | 中 | 多端团队协作 |