MethodChannel,EventChannel和BasicMessageChannel之间有什么区别?

时间:2019-05-16 14:04:29

标签: flutter

在Flutter中,有三种类型的平台渠道,我想知道它们之间的区别。

3 个答案:

答案 0 :(得分:2)

这些通道用于在本机代码(项目中的插件或本机代码)和Flutter框架之间进行通信。

MethodChannel

MethodChannel 用于“ communicating with platform plugins using asynchronous method calls”。这意味着您可以在本机端使用此通道访问invoke methods,并且可以返回一个值,反之亦然。
您可以例如调用以这种方式检索设备名称的方法。

EventChannel

使用EventChannel数据。这样会在事物的 Dart 端生成having a Stream,并且能够从本机端获取该流。
如果您想在每次特定的事件发生时都发送数据,例如设备的wifi连接发生变化时。

BasicMessageChannel

这可能不是您要使用的东西。 BasicMessageChannel 用于使用specified codec对消息进行编码和解码。
例如,使用JSON或二进制数据。这只是一个简单的版本,因为您的数据具有清晰的类型(编解码器),并且您不会发送多个参数等。

答案 1 :(得分:1)

这里是指向您的好解释的链接https://medium.com/flutter-io/flutter-platform-channels-ce7f540a104e

基本上有两种主要类型:

方法通道:设计用于在Dart和Java / Kotlin或Objective-C / Swift中调用命名的代码段。 (从颤抖到平台)

事件通道:专用平台通道,用于将平台事件作为Dart流公开给Flutter的用例。 (从平台到颤抖)

答案 2 :(得分:0)

@creativecreatorormaybenot answer清除了所有内容,让我添加更多内容。

方法频道

这更像RPC调用。您从Flutter应用程序调用本机代码中的方法,本机代码执行某些操作,最后以成功或错误进行响应。该调用可能是获取当前电池状态,网络信息或温度数据。本机端响应后,将无法再发送更多信息,直到下一次呼叫。

Method Channel provides platform communication using asynchronous method calls.
  

注意:-如果需要,方法调用也可以反向发送   方向,平台充当实现方法的客户端   在Dart中。

事件频道

这更像reactive programming,其中使用asynchronous event streams进行平台通信。这些事件可能是您需要流传输到Flutter应用程序的任何事件。将数据从本机代码流传输到Flutter应用程序,例如不断更新BLE或WiFi扫描结果,加速度计和陀螺仪,甚至是从密集数据收集中定期更新状态。

基本消息频道

它提供类似于BinaryMessages的基本消息传递服务,但具有可插入message codecs,以支持发送字符串或半结构化消息。消息在发送之前被编码为二进制,接收到的二进制消息被解码为Dart值。使用的MessageCodec必须与平台插件使用的兼容。