distinct method

void distinct(
  1. void callback(
    1. T value
    ), [
  2. bool equals(
    1. T previous,
    2. T current
    )?
])

Only call callback when value actually changes (distinct)

Implementation

void distinct(void Function(T value) callback,
    [bool Function(T previous, T current)? equals]) {
  T? previousValue;
  bool hasBeenSet = false;

  void listener() {
    final currentValue = value;
    if (!hasBeenSet) {
      hasBeenSet = true;
      previousValue = currentValue;
      callback(currentValue);
      return;
    }

    final areEqual = equals?.call(previousValue as T, currentValue) ??
        (previousValue == currentValue);

    if (!areEqual) {
      previousValue = currentValue;
      callback(currentValue);
    }
  }

  addListener(listener);
}