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'
}