flutter提供了一套channel机制来使得flutter和native之间互相通信。应用的Flutter部分通过平台通道(platform channel)将消息发送到其应用程序的所在的宿主(iOS或Android)应用(原生应用)。宿主监听平台通道,并接收该消息。然后它会调用该平台的API,并将响应发送回客户端,即应用程序的Flutter部分。
截屏2020-05-07 上午11.18.36.png
channel通道分为三种
1).BasicMessageChannel:它提供类似于BinaryMessages的基本消息传递服务,但可自定义消息编解码器,支持发送字符串或半结构化消息,持续通信。收到消息后可以回复此次消息。
2).MethodChannel:它使用异步方法调用的方式进行平台通信,属于一次性通讯。
3).EventChannel:它使用事件流的方式进行平台通信,持续通讯。
接下来分两种情况
1.原生页面跳转到flutter,flutter传值给原生,最后通过回调再给到flutter。
原生端
// 要与main.dart中一致
NSString * channelName = @"XXXXXXXXXXX";
self.methodChannel = [FlutterMethodChannel methodChannelWithName:channelName binaryMessenger:messenger];
__weak typeof(self) weakSelf = self;
[self.methodChannel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult _Nonnull result) {
if ([call.method isEqualToString:@"AAA"])//A事件处理
{
[weakSelf setBuryingPoint:call result:result];
}else if ([call.method isEqualToString:@"BBB"])//B事件处理
{
[weakSelf doAction:call result:result];
}else {
result(FlutterMethodNotImplemented);
}
}];
网友评论