Flutter的MethodChannel、EventChannel、BasicMessageChannel使用
·
1️⃣ MethodChannel(请求-响应模型)
异步请求形式,通信模型如下:
Flutter → invokeMethod() → Native
Flutter ← result.success() ← Native
Flutter代码
const channel = MethodChannel("demo");
final result = await channel.invokeMethod("getBattery");
Native的iOS端
channel.setMethodCallHandler { call, result in
if call.method == "getBattery" {
result(80)
}
}
2️⃣ EventChannel(流式数据)
适合:
- 传感器数据
- 定位更新
- 下载进度
- 监听系统状态
单向流:Native → Flutter,通信模型如下:
Native → EventSink → Flutter Stream
在Flutter端只管接收即可
const eventChannel = EventChannel("demo_event");
eventChannel.receiveBroadcastStream().listen((event) {
print(event);
});
3️⃣ BasicMessageChannel(双向消息)
最底层、最灵活!适合:
- 自定义协议
- 双向频繁通信
- 纯文本、JSON 或 binary 数据
通信模型
Flutter ←──────────────→ Native
BasicMessageChannel
flutter端代码
static const channel = BasicMessageChannel<String>("basic_demo", StringCodec());
Future<void> sendMessage() async {
final response = await channel.send(controller.text);
setState(() {
result = response ?? "No response";
});
}
void initState() {
super.initState();
// 监听 Native 主动发来的消息
channel.setMessageHandler((message) async {
return "Flutter received: $message";
});
}
Native端,以iOS的Swift举例子
import Flutter
func registerBasicChannel(engine: FlutterEngine) {
let channel = FlutterBasicMessageChannel(
name: "basic_demo",
binaryMessenger: engine.binaryMessenger,
codec: FlutterStringCodec.sharedInstance()
)
channel.setMessageHandler { message, reply in
if let text = message as? String {
let processed = text.uppercased()
reply(processed) // 单条消息回复
} else {
reply("Invalid message")
}
}
// 也可以 Native 主动发消息到Flutter
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
channel.sendMessage("Hello from Native")
}
}
更多推荐


所有评论(0)