update method

  1. @override
void update()
override

Call the setItemSize callback while traversing the items list.

Implementation

@override
void update() {
  final length = items.length;

  double eachSize = maxSize / length;

  bool isSuppressed(T e) {
    return isSuppressedItem(e) || eachSize < getItemMinSize(e);
  }

  final suppressedItems = items.where(isSuppressed);

  if (suppressedItems.isNotEmpty) {
    final totalSuppressedSize = suppressedItems.fold<double>(0, (p, e) {
      return p + (isSuppressedItem(e) ? getItemSize(e) : getItemMinSize(e));
    });

    eachSize =
        (maxSize - totalSuppressedSize) / (length - suppressedItems.length);
  }

  for (final item in items) {
    if (isSuppressedItem(item)) continue;

    setItemSize(item, max(eachSize, getItemMinSize(item)));
  }
}