reportWrite<T> method

void reportWrite<T>(
  1. T newValue,
  2. T oldValue,
  3. void setNewValue(), {
  4. EqualityComparer<T>? equals,
  5. bool? useDeepEquality,
})

Implementation

void reportWrite<T>(T newValue, T oldValue, void Function() setNewValue,
    {EqualityComparer<T>? equals, bool? useDeepEquality}) {
  final areEqual = equals ??
      (a, b) => equatable(a, b, useDeepEquality: useDeepEquality ?? false);

  // Avoid unnecessary observable notifications of @observable fields of Stores
  if (areEqual(newValue, oldValue)) {
    return;
  }

  context.spyReport(ObservableValueSpyEvent(this,
      newValue: newValue, oldValue: oldValue, name: name));

  final actionName = context.isSpyEnabled ? '${name}_set' : name;

  // ignore: cascade_invocations
  context.conditionallyRunInAction(() {
    setNewValue();
    reportChanged();
  }, this, name: actionName);

  // ignore: cascade_invocations
  context.spyReport(EndedSpyEvent(type: 'observable', name: name));
}