ListDifference<T> constructor

ListDifference<T>({
  1. List<T> initialValues = const [],
  2. List<T> currentValues = const [],
  3. bool containsValidator(
    1. List<T> elements,
    2. T e
    )?,
})

Implementation

ListDifference({
  List<T> initialValues = const [],
  List<T> currentValues = const [],
  this.containsValidator,
}) {
  final List<T> _initial = initialValues.removeDuplicates();
  final List<T> _current = currentValues.removeDuplicates();

  if (!listEquals(_initial, _current)) {
    if (_initial.isEmpty) {
      added.addAll(_current);
    } else {
      for (final item in _initial) {
        if (!_validator(_current, item)) removed.add(item);
      }
      for (final item in _current) {
        if (!_validator(_initial, item)) added.add(item);
      }
    }
    equals.addAll(currentValues.where((e) => _validator(initialValues, e)));
  } else {
    equals.addAll(_current);
  }
}