sync<T> method

List<T> sync<T>(
  1. List<T> entries,
  2. List<T> next,
  3. K keyOf(
    1. T item
    ),
  4. Duration duration,
)

Moves entries to next, keeping the ones it drops while they leave.

Implementation

List<T> sync<T>(
  List<T> entries,
  List<T> next,
  K Function(T item) keyOf,
  Duration duration,
) {
  final keys = {for (final item in next) keyOf(item)};
  final shown = {
    for (final entry in entries)
      if (!isLeaving(keyOf(entry))) keyOf(entry),
  };
  for (final key in shown) {
    if (!keys.contains(key)) {
      leave(key, duration);
    }
  }
  for (final key in keys) {
    if (!shown.contains(key)) {
      enter(key, duration);
    }
  }
  return keepLeaving(entries, next, keyOf);
}