FlutterChannel介绍
FlutterChannel是Flutter 与OpenHarmony原生层之间进行通信的核心机制,它提供了三种不同类型 的通信通道,满足各种跨平台通信需求。通过FlutterChannel,开发者可以在Flutter代码中调用 OpenHarmony原生APl,也可以在原生代码中触发Flutter端的回调。
三种通信通道
1. MethodChannel:用于方法调用,支持Flutter和原生之间的双向方法调用,比如调用相机、电池电量等。
2.BasicMessageChannel:用于基本消息传递,支持字符串、二进制等数据的双向传递
3.EventChannel:用于事件流通信,支持原生向Flutter发送事件通知
// 创建实例
final _platform = const MethodChannel('samples.flutter.dev/battery');
// 调用方法 getBatteryLevel
final result = await _platform.invokeMethod<int>('getBatteryLevel');
onAttachedToEngine(binding: FlutterPluginBinding): void {
let that = this;
// 创建实例
this.channel = new MethodChannel(binding.getBinaryMessenger(), "samples.flutter.dev/battery");
// 设置回调,调用具体的实现
this.channel.setMethodCallHandler({
onMethodCall(call: MethodCall, result: MethodResult) {
switch (call.method) {
case "getBatteryLevel":
that.api.getBatteryLevel(result);
break;
default:
result.notImplemented();
break;
}
}
})
}
int count = 0;
// 创建实例
final _basicChannel = const BasicMessageChannel(
"samples.flutter.dev/basic_channel", StandardMessageCodec());
// 调用方法,获取平台侧的返回值
String result = await _basicChannel.send(++count) as String;
onAttachedToEngine(binding: FlutterPluginBinding): void {
// 创建实例
this.basicChannel = new BasicMessageChannel(binding.getBinaryMessenger(), "samples.flutter.dev/basic_channel", new StandardMessageCodec());
// 设置回调,调用具体的实现
this.basicChannel.setMessageHandler({
onMessage(message: Any, reply: Reply<Any>) {
Log.i(TAG, "message=" + message);
if (message % 2 == 0) {
reply.reply("run with if case.");
} else {
reply.reply("run with else case");
}
}
})
}
// 创建实例
final _eventChannel = const EventChannel('samples.flutter.dev/event_channel');
// 注册事件监听
_eventChannel.receiveBroadcastStream().listen((event) {
setState(() {
message = "EventChannel event=$event";
});
});
private eventSink?: EventSink;
onAttachedToEngine(binding: FlutterPluginBinding): void {
let that = this;
// 创建实例
this.eventChannel = new EventChannel(binding.getBinaryMessenger(), "samples.flutter.dev/event_channel");
// 设置回调,获取EventSink
this.eventChannel.setStreamHandler({
onListen(args: Any, events: EventSink): void {
that.eventSink = events;
Log.i(TAG, "onListen: " + args);
},
onCancel(args: Any): void {
that.eventSink = undefined;
Log.i(TAG, "onCancel: " + args);
}
});
}
// ...
// 使用 EventSink 发送数据后,dart断的事件监听回调会收到发送的数据。
that.eventSink?.success("Success at " + new Date()); 原文作者:;如有侵权,请联系管理员删除。