如何给Flutter.EventChannel添加多个监听器?
How to add several listener to Flutter.EventChannel?
我正在构建一个 Flutter-Plugin
,它提供了几个 UI-Widgets
来与本地 (Android/iOS) 库交互。更新 and/or 库到 Flutter 端的状态变化是通过 Events
委托的,它通过 Flutter EventChannel.
委托给 Flutter
这很好用,但是我想将 几个 听众添加到同一个频道。但是每次我想注册第二个监听器时,第一个监听器都会被取消(StreamHandler.onCancel()
调用)。
private var channel01:EventChannel.EventSink ?= null
private var channel02:EventChannel.EventSink ?= null
//...
private var channel06:EventChannel.EventSink ?= null
//One EventChannel for every UI-Widget?!?!
EventChannel(registrar.messenger(), EVENT_CHANNEL_MAIN_SCREEN, JSONMethodCodec.INSTANCE).setStreamHandler(object : EventChannel.StreamHandler {
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
L.d("Listener attached for channel 01")
postEvent(MyEvent("Send some data on attach"))
channel01 = events
}
override fun onCancel(p0: Any?) {
L.d("Listener detached for channel 01")
channel01 = null
}
})
//Trigger some data via flutter stream from Android/iOS to Flutter
fun postEvent(event: MyEvent) {
activity.runOnUiThread {
channel01?.success(event)
channel02?.success(event)
}
}
所以目前我正在为每个 UI-Widget 使用一个 EventChannel,但我想还有更好的方法吗?
顺便说一句,我在 Flutter 中使用 Inherited Widget
作为 DataProvider,它是 EventChannel
的唯一监听器,并且将更改委托给树,但是这是不可能的,因为到“架构指南”
问题
- 我可以向 一个 EventChannel 添加多个监听器吗?
- 我可以监控添加或删除了哪些侦听器吗?!
不可能将多个听众附加到一个频道。
合适的解决方案:将 EventChannel 附加到一个(继承的)小部件中,将此小部件提升到树中并使用 flutter setState
逻辑来更新您的小部件。
我正在构建一个 Flutter-Plugin
,它提供了几个 UI-Widgets
来与本地 (Android/iOS) 库交互。更新 and/or 库到 Flutter 端的状态变化是通过 Events
委托的,它通过 Flutter EventChannel.
这很好用,但是我想将 几个 听众添加到同一个频道。但是每次我想注册第二个监听器时,第一个监听器都会被取消(StreamHandler.onCancel()
调用)。
private var channel01:EventChannel.EventSink ?= null
private var channel02:EventChannel.EventSink ?= null
//...
private var channel06:EventChannel.EventSink ?= null
//One EventChannel for every UI-Widget?!?!
EventChannel(registrar.messenger(), EVENT_CHANNEL_MAIN_SCREEN, JSONMethodCodec.INSTANCE).setStreamHandler(object : EventChannel.StreamHandler {
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
L.d("Listener attached for channel 01")
postEvent(MyEvent("Send some data on attach"))
channel01 = events
}
override fun onCancel(p0: Any?) {
L.d("Listener detached for channel 01")
channel01 = null
}
})
//Trigger some data via flutter stream from Android/iOS to Flutter
fun postEvent(event: MyEvent) {
activity.runOnUiThread {
channel01?.success(event)
channel02?.success(event)
}
}
所以目前我正在为每个 UI-Widget 使用一个 EventChannel,但我想还有更好的方法吗?
顺便说一句,我在 Flutter 中使用 Inherited Widget
作为 DataProvider,它是 EventChannel
的唯一监听器,并且将更改委托给树,但是这是不可能的,因为到“架构指南”
问题
- 我可以向 一个 EventChannel 添加多个监听器吗?
- 我可以监控添加或删除了哪些侦听器吗?!
不可能将多个听众附加到一个频道。
合适的解决方案:将 EventChannel 附加到一个(继承的)小部件中,将此小部件提升到树中并使用 flutter setState
逻辑来更新您的小部件。