sync<T> method
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);
}