Skip to content

SharedFlow

A hot flow that can emit multiple values and has no initial value. Supports replay and buffer.

class MyViewModel : ViewModel() {
private val _events = MutableSharedFlow<String>()
val events: SharedFlow<String> = _events.asSharedFlow()
fun sendEvent(event: String) {
viewModelScope.launch {
_events.emit(event)
}
}
}
// Replay last 3 values to new collectors
private val _events = MutableSharedFlow<String>(replay = 3)
@Composable
fun MyScreen(viewModel: MyViewModel = viewModel()) {
LaunchedEffect(Unit) {
viewModel.events.collect { event ->
// Handle one-time events (e.g., show snackbar, navigate)
println("Event received: $event")
}
}
}
  • One-time events (navigation, snackbar, toast)
  • Events that should not be replayed on configuration change
  • Broadcasting to multiple collectors