swift - 如何在 Flutter iOS Native 代码(Swift)中使用多个 EventChannel
问题描述
嗨,当我调用以下设置处理程序时,我正在尝试使用多个事件通道将数据从本机端流式传输到 iOS swift 端,我们只得到一个回调,我想要一些方法来区分我得到的事件池是用于事件通道 1 或事件通道 2
let EventChannel1 = FlutterEventChannel(name: "stream1",binaryMessenger: controller.binaryMessenger)
let EventChannel2 = FlutterEventChannel(name: "stream2",binaryMessenger: controller.binaryMessenger)
EventChannel1.setStreamHandler(self)
EventChannel2.setStreamHandler(self)
然后我们得到这个相关的回调
func onListen(withArguments arguments: Any?,
eventSink: @escaping FlutterEventSink) -> FlutterError? {
debugPrint("On Listen Call")
EventSink = eventSink//this is for the old event channel now I am using
//two event channel.
//and don't know how to know which event channel is which. on flutter
//app startup I listen both stream.
//and the "on Listen Call" which I print to console print two times
//which indicate the I am listen to both stream.
//but here I don't know how I know if the eventsink is for which event channel.
//I want some condition here but don,t know how to implement. if possible
//something like this if eventchanel.name == eventchannel1
//so that I know which event channel event sink it is and handle it according.
return nil
}
func onCancel(withArguments arguments: Any?) -> FlutterError? {
debugPrint("On cancel Call")
EventSink = nil
return nil
}
如果问题不清楚,请告诉我,以便我可以更清楚地解释。
解决方案
在查看 GitHub Flutter 事件通道示例并尝试不同的事情时,我喜欢这个问题。检查下面我添加评论的代码,以便遇到相同问题的人可以轻松修复它。
let EventChannel1 = FlutterEventChannel(name: "stream1",binaryMessenger: controller.binaryMessenger)
let EventChannel2 = FlutterEventChannel(name: "stream2",binaryMessenger: controller.binaryMessenger)
EventChannel1.setStreamHandler(self)
EventChannel2.setStreamHandler(self)
func onListen(withArguments arguments: Any?,
eventSink: @escaping FlutterEventSink) -> FlutterError? {
debugPrint("On Listen Call")
//you see the arguments above this are the one which we can use to know which event channel it is.
EventSink = eventSink
return nil
}
func onCancel(withArguments arguments: Any?) -> FlutterError? {
debugPrint("On cancel Call")
EventSink = nil
return nil
}
当您在颤动侧收听此流时,您可以在那里传递参数。检查下面的代码。(颤振侧代码)
static const EventChannel1 = const EventChannel("stream1")
static const EventChannel2 = const EventChannel("stream2")
EventChannel1.receiveBroadcastStream(parameter1).listen(_handlestream1);
//here instead of parameter you can pass integer or string
EventChannel2.receiveBroadcastStream(parameter2).listen(_handlestream2);
////here instead of parameter you can pass integer or string and that can be use in on listen to check which event channel it is.
Swift 本机代码将如下所示。
let EventChannel1 = FlutterEventChannel(name: "stream1",binaryMessenger: controller.binaryMessenger)
let EventChannel2 = FlutterEventChannel(name: "stream2",binaryMessenger: controller.binaryMessenger)
EventChannel1.setStreamHandler(self)
EventChannel2.setStreamHandler(self)
func onListen(withArguments arguments: Any?,
eventSink: @escaping FlutterEventSink) -> FlutterError? {
debugPrint("On Listen Call")
//here we will check the argument we pass will listen to this eventstream.
if arguments as? Int == parameter1 {
// here you unwrap the argument and check it with parameter you pass
//if this check pass its mean that its is event channel1 and handle that here
Evensink1 = eventSink
}
if arguments as? Int == parameter2 {
//if this check pass mean eventchannel2 and handle that here
EventSink = eventSink
}
return nil
}
func onCancel(withArguments arguments: Any?) -> FlutterError? {
debugPrint("On cancel Call")
EventSink = nil
return nil
}
如果您需要任何进一步的帮助,请告诉我我在这里为您提供帮助。
推荐阅读
- mysql - 为什么更新查询在此函数中不起作用?
- python - Tkinter 复选框背景切换
- r - 闪亮模块内的可编辑 DT
- php - Twig 中的日期和月份混淆了 |date_modify
- amazon-web-services - cloudwatch日志的日志流中如何删除单行日志?
- google-analytics - Google BigQuery:我看到缺少“clientId”列,但实际上存在于表的架构中
- uwp - 使用 Windows::Media::SpeechSynthesis 创建 UWP DLL
- php - 是否有可视化 PHP 属性注释(注释)的工具?
- php - ModSecurity:警告。REQUEST_METHOD 处的模式匹配“^POST$”
- kubernetes - 如何通过查询 DNS srv 记录获取 kubernetes pod 的 IP 地址?