asFlow
通过 Flow 接收此通道内的所有事件.
val eventChannel: EventChannel<BotEvent> = ...
val flow: Flow<BotEvent> = eventChannel.asFlow()
flow.collect { // it
//
}
flow.filterIsInstance<GroupMessageEvent>.collect { // it: GroupMessageEvent
// 处理事件 ...
}
flow.filterIsInstance<FriendMessageEvent>.collect { // it: FriendMessageEvent
// 处理事件 ...
}
Content copied to clipboard
类似于 SharedFlow, EventChannel.asFlow 返回的 Flow 永远都不会停止. 因此上述示例 Flow.collect 永远都不会正常 (以抛出异常之外的) 结束.
通过 asFlow 接收事件相当于通过 subscribeAlways 以 EventPriority.MONITOR 监听事件.
注意: context, parentJob 等控制 EventChannel.defaultCoroutineContext 的操作对 asFlow 无效. 因为 asFlow 并不创建协程.
Since
2.12
See also
Flow