Skip to content

Instantly share code, notes, and snippets.

@linean
Created April 13, 2022 17:15
Show Gist options
  • Save linean/97326566177207aa6ff59487d2a90634 to your computer and use it in GitHub Desktop.
Save linean/97326566177207aa6ff59487d2a90634 to your computer and use it in GitHub Desktop.
class ViewModel {
private val events = Channel<Event>()
val state = events.receiveAsFlow()
.runningFold(State(), ::reduceState)
.stateIn(viewModelScope, Eagerly, State())
fun handleEvent(event: Event) {
events.trySend(event)
}
private fun reduceState(currentState: State, event: Event): State {
return when (event) {
is Increment -> currentState.copy(counter = currentState.counter + 1)
is Decrement -> currentState.copy(counter = currentState.counter - 1)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment