private class State( var set: Boolean = false, var t: Any? = null, var composing: Boolean = false, var subscription: Disposable? = null ) @Composable fun Observe(observable: Observable, mapper: @Composable() (T) -> Unit) { Recompose { recompose -> val current = remember { State() } current.composing = true current.subscription = remember { observable.subscribe { current.set = true current.t = it if (!current.composing) recompose() } } onDispose { current.subscription?.dispose() } if (current.set) { @Suppress("UNCHECKED_CAST") mapper(current.t as T) } current.composing = false } }