class FlowSource(initialValue: T) { private val chan = ConflatedBroadcastChannel().apply { post(initialValue) } var value = initialValue set(value) { field = value chan.post(value) } val flow: Flow = chan.asFlow() private fun SendChannel.post(value: T) { GlobalScope.launch { send(value) } } }