diff --git a/packages/flutter/lib/src/widgets/scrollable.dart b/packages/flutter/lib/src/widgets/scrollable.dart index 5267676839..038652c885 100644 --- a/packages/flutter/lib/src/widgets/scrollable.dart +++ b/packages/flutter/lib/src/widgets/scrollable.dart @@ -274,6 +274,8 @@ class ScrollableState extends State { Simulation _simulation; // if we're flinging, then this is the animation with which we're doing it AnimationController _controller; + double _contentExtent; + double _containerExtent; @override void dispose() { @@ -285,7 +287,11 @@ class ScrollableState extends State { @override void dependenciesChanged() { _scrollBehavior = createScrollBehavior(); - didUpdateScrollBehavior(scrollOffset); + didUpdateScrollBehavior(_scrollBehavior.updateExtents( + contentExtent: _contentExtent, + containerExtent: _containerExtent, + scrollOffset: scrollOffset + )); super.dependenciesChanged(); } @@ -495,6 +501,8 @@ class ScrollableState extends State { /// [didUpdateScrollBehavior]. /// 3. Updating this object's gesture detector with [updateGestureDetector]. void handleExtentsChanged(double contentExtent, double containerExtent) { + _contentExtent = contentExtent; + _containerExtent = containerExtent; didUpdateScrollBehavior(scrollBehavior.updateExtents( contentExtent: contentExtent, containerExtent: containerExtent, diff --git a/packages/flutter/test/widget/scroll_behavior_test.dart b/packages/flutter/test/widget/scroll_behavior_test.dart index d011a0b07e..8fa234ea5c 100644 --- a/packages/flutter/test/widget/scroll_behavior_test.dart +++ b/packages/flutter/test/widget/scroll_behavior_test.dart @@ -80,6 +80,8 @@ void main() { expect(delegate, isNotNull); expect(delegate.flag, isTrue); expect(behavior, new isInstanceOf()); + expect(behavior.contentExtent, equals(1000.0)); + expect(behavior.containerExtent, equals(600.0)); // Same Scrollable, different ScrollConfiguration await tester.pumpWidget( @@ -101,5 +103,8 @@ void main() { expect(delegate, isNotNull); expect(delegate.flag, isFalse); expect(behavior, new isInstanceOf()); + // Regression test for https://github.com/flutter/flutter/issues/5856 + expect(behavior.contentExtent, equals(1000.0)); + expect(behavior.containerExtent, equals(600.0)); }); }