StateFlow works using content equality to control conflation. If you set value of a MutableStateFlow to a new object that is equal to the existing value, the "new" value is not emitted to consumers.

In this example, our state is a State wrapper around an Int. State is a data class, so we get an equals() implementation that compares those Int values.

Initially, we populate our MutableStateFlow with State(123). We then update value with State(456) 25 times. We create new State objects for each of those passes, rather than reuse a single State. Yet, our collector will only receive the State(456) and the first of the State(123) states, not the remaining 24. Each of the latter 24 State(123) objects equals() the original one, so the collector is not given any of those 24.

You can learn more about this in:
Run Edit