在Flutter中,有三种类型的平台渠道,我想知道它们之间的区别。
答案 0 :(得分:2)
这些通道用于在本机代码(项目中的插件或本机代码)和Flutter框架之间进行通信。
MethodChannel
用于“ communicating with platform plugins using asynchronous method calls”。这意味着您可以在本机端使用此通道访问invoke methods,并且可以返回一个值,反之亦然。
您可以例如调用以这种方式检索设备名称的方法。
使用EventChannel
来流数据。这样会在事物的 Dart 端生成having a Stream
,并且能够从本机端获取该流。
如果您想在每次特定的事件发生时都发送数据,例如设备的wifi连接发生变化时。
这可能不是您要使用的东西。 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必须与平台插件使用的兼容。