update method
Call the setItemSize callback while traversing the items list.
Implementation
@override
void update() {
final length = items.length;
double effectiveMaxSize = maxSize;
double totalWidth = items.fold<double>(0, (p, e) => p += getItemSize(e));
double scale = maxSize / totalWidth;
bool isSuppressed(T e) {
return isSuppressedItem(e) || getItemSize(e) * scale < 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));
});
effectiveMaxSize = maxSize - totalSuppressedSize;
totalWidth = items.whereNot(isSuppressed).fold(0, (p, e) {
return p + getItemSize(e);
});
scale = effectiveMaxSize / totalWidth;
}
for (int i = 0; i < length; i += 1) {
final item = items.elementAt(i);
if (isSuppressedItem(item)) continue;
final minSize = getItemMinSize(item);
final size = max(minSize, getItemSize(item) * scale);
setItemSize(item, size);
}
}