Flows

Learn about flows and how they implement the Observable design pattern in Kotlin.

We'll cover the following...

Flows

A flow is a cold, asynchronous stream and is an implementation of the Observable design pattern.

As a quick reminder, the Observable design pattern has two methods: subscribe() (which allows consumers to, well, subscribe for messages) and publish() (which sends a new message to all of the subscribers).

The publish method of the Flow object is called emit(), while the subscribe method is called collect().

We can create a new flow using the flow() function:

val numbersFlow: Flow<Int> = flow { ... }

Inside the flow constructor, we can use the emit() function to publish a new value to all listeners.

For example, here we create a flow that would publish ten numbers using the flow constructor:

flow {
(0..10).forEach {
println("Sending $it")
emit(it)
}
}
Sending integers from a flow with Kotlin coroutines

Now that we’ve covered how to publish a message, let’s discuss how to subscribe to a flow.

For that, we can use the collect() function available ...