Commit 75633c8c authored by Adam Barth's avatar Adam Barth

Merge pull request #784 from abarth/rm_epsilon

Remove floating-point errors from ScrollableWidgetList
parents 465fbbf9 c696c21a
......@@ -338,8 +338,6 @@ class Block extends Component {
/// widget when you have a large number of children or when you are concerned
// about offscreen widgets consuming resources.
abstract class ScrollableWidgetList extends Scrollable {
static const _kEpsilon = .0000001;
ScrollableWidgetList({
Key key,
ScrollDirection scrollDirection: ScrollDirection.vertical,
......@@ -445,24 +443,13 @@ abstract class ScrollableWidgetList extends Scrollable {
if (paddedScrollOffset < scrollBehavior.minScrollOffset) {
// Underscroll
double visibleExtent = _containerExtent + paddedScrollOffset;
itemShowCount = (visibleExtent / itemExtent).round() + 1;
itemShowCount = (visibleExtent / itemExtent).ceil();
viewportOffset = _toOffset(paddedScrollOffset);
} else {
itemShowCount = (_containerExtent / itemExtent).ceil();
double alignmentDelta = (-paddedScrollOffset % itemExtent);
double drawStart = paddedScrollOffset;
if (alignmentDelta != 0.0) {
alignmentDelta -= itemExtent;
itemShowCount += 1;
drawStart += alignmentDelta;
viewportOffset = _toOffset(-alignmentDelta);
}
if (itemCount > 0) {
// floor(epsilon) = 0, floor(-epsilon) = -1, so:
if (drawStart.abs() < _kEpsilon)
drawStart = 0.0;
itemShowIndex = (drawStart / itemExtent).floor() % itemCount;
}
itemShowCount = (_containerExtent / itemExtent).ceil() + 1;
itemShowIndex = (paddedScrollOffset / itemExtent).floor();
viewportOffset = _toOffset(paddedScrollOffset - itemShowIndex * itemExtent);
itemShowIndex %= itemCount; // Wrap index for when itemWrap is true.
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment