Kotlin Flow: How to unsubscribe/stop

You could use the takeWhile operator on Flow.

flow.takeWhile { it != "someString" }.collect { emittedValue ->
         //Do stuff until predicate is false  
       }

For those willing to unsubscribe from the Flow within the Coroutine scope itself, this approach worked for me :

viewModelScope.launch {

        beaconService.streamTest().collect {

            //Do something then
            this.coroutineContext.job.cancel()

        }
}

A solution is not to cancel the flow, but the scope it's launched in.

val job = scope.launch { flow.cancellable().collect { } }
job.cancel()

NOTE: You should call cancellable() before collect if you want your collector stop when Job is canceled.