事件流的订阅
事件流的订阅就较为简单了,因为它的本质就是一个sharedFlow,我们只需要稍加封装即可,然后再收集之后加一个类型判断就好啦,直接看代码!
fun <T : UiSingleEvent> Flow<T>.collectSingleEvent( lifecycleOwner: LifecycleOwner, state: Lifecycle.State = Lifecycle.State.STARTED, action: (T) -> Unit ) { lifecycleOwner.lifecycleScope.launch { lifecycleOwner.repeatOnLifecycle(state) { this@collectSingleEvent.collect { action(it) } } } }
代码非常简单,就是对repeatOnLifecycle API进行一个封装,UI端的代码如下:
singleEventFlow.collectSingleEvent(this@SearchActivity) { event -> when (event) { is SearchViewModel.SearchSingleEvent.ToastEventSearch -> { toast(event.message) } } }
因为事件是通过类型来区分的,因此我们需要用kotlin的when来判断类型。
总结
很感谢你看到这里,系列就告一段落了。本系列是笔者第一次在互联网上发文,文章是上班摸鱼或者下班之后争取的少许时间写的,几乎没有润色而且内容也不一定准确,只是提供一种不同的角度供大家思考,起到一个抛砖引玉的作用,如果大家对笔者有任何的建议或者希望讨论的地方,都可以在评论区留言,有空笔者都会回复。