Reactive components with Kotlin Flow
// Publisher
val publisher = flowPublisher {
emit(1)
emit(2)
emit(3)
}
// or create publisher from source Flow
val myFlowEmitter = flow { emit(1) } // "source" Flow (emitter)
val publisher = FlowPublisher(source = myFlowEmitter)
// or use Flow extension
val publisher = myFlowEmitter.asPublisher()// Create Subscribers
// use `flowSubscriberOf`
val subscriberA = flowSubscriberOf<Int>(publisher)
// or
val subscriberB = FlowSubscriber<Int>()
publisher.subscribe(subscriberB)// Receive values as Flow
val flowFromA = subscriberA.asFlow()
val flowFromB = subscriberB.asFlow()// Start emitter from publisher
publisher.open()// Unsubscribe any receiver
publisher.unsubscribe(subscriberA)val emitter = FlowEmitter<Int>()
// use emitter as FlowPublisher
val flowPublisher = emitter.asPublisher()
// emit values
emitter.emit(1)
emitter.emit(2)
emitter.emit(3)
...Use observeState:
coroutineScope.observeState(stateFlow) {
// collect value
}Instead of:
coroutineScope.launch {
stateFlow.collect {
// collect value
}
}- Project
build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- Module
build.gradle
dependencies {
implementation 'com.github.jeziellago:CoroutinesFlowExt:0.1.2'
}