extrapolateMaxScrollOffset method
double
extrapolateMaxScrollOffset(
- _PopUpList? popUpList,
- int firstIndex,
- int lastIndex,
- double leadingScrollOffset,
- double trailingScrollOffset,
- int childCount,
override
Estimates the max scroll offset based on the rendered viewport data.
Implementation
@override
double extrapolateMaxScrollOffset(
_PopUpList? popUpList,
int firstIndex,
int lastIndex,
double leadingScrollOffset,
double trailingScrollOffset,
int childCount,
) {
assert(!intervalManager.hasPendingUpdates);
if (lastIndex == childCount - 1) {
return trailingScrollOffset;
}
final ilist = popUpList?.intervals ?? intervalManager.list;
var innerCount = 0, trailingCount = 0;
var averageInnerCount = 0.0;
var trailingSize = 0.0;
for (final i in ilist.expandedIntervals.whereType<_SpaceInterval>()) {
if (i.actualBuildOffset > lastIndex) {
trailingCount++;
trailingSize += i.currentSize;
} else {
innerCount++;
averageInnerCount += i.averageCount;
}
}
var ret = trailingScrollOffset + trailingSize;
// # items outside/after the viewport, excluding resizing intervals
final remainingCount = childCount - lastIndex - trailingCount - 1;
if (remainingCount > 0) {
final averageExtent = trailingScrollOffset /
(1 + lastIndex - innerCount + averageInnerCount);
ret += averageExtent * remainingCount;
}
return ret;
}