Skip to content

jeziellago/CoroutinesFlowExt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CoroutinesFlowExt

Reactive components with Kotlin Flow

FlowPublisher / FlowSubscriber

// 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)

FlowEmitter

val emitter = FlowEmitter<Int>()

// use emitter as FlowPublisher
val flowPublisher = emitter.asPublisher()

// emit values
emitter.emit(1)
emitter.emit(2)
emitter.emit(3)
...

Easy collect using StateFlow

Use observeState:

coroutineScope.observeState(stateFlow) {
  // collect value
}

Instead of:

coroutineScope.launch {
    stateFlow.collect {
        // collect value
    }
}

Add dependencies

  • Project build.gradle
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
  • Module build.gradle
dependencies {
    implementation 'com.github.jeziellago:CoroutinesFlowExt:0.1.2'
}