From 18b78cfafa99813052bf9678d3b09980c34cc305 Mon Sep 17 00:00:00 2001 From: Hans Muller Date: Tue, 25 Aug 2015 10:40:50 -0700 Subject: [PATCH] Enable initializing Scrollable scrollOffset Added Scrollable named parameter initializeScrollOffset. If unspecified, then the initial value of scrollOffset is 0.0 as before. --- packages/flutter/lib/widgets/scrollable.dart | 30 +++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/packages/flutter/lib/widgets/scrollable.dart b/packages/flutter/lib/widgets/scrollable.dart index 921ef0ca75..8058b50465 100644 --- a/packages/flutter/lib/widgets/scrollable.dart +++ b/packages/flutter/lib/widgets/scrollable.dart @@ -35,18 +35,22 @@ abstract class Scrollable extends StatefulComponent { Scrollable({ Key key, + this.initialScrollOffset, this.scrollDirection: ScrollDirection.vertical }) : super(key: key) { assert(scrollDirection == ScrollDirection.vertical || scrollDirection == ScrollDirection.horizontal); } + double initialScrollOffset; ScrollDirection scrollDirection; AnimatedSimulation _toEndAnimation; // See _startToEndAnimation() ValueAnimation _toOffsetAnimation; // Started by scrollTo() void initState() { + if (initialScrollOffset is double) + _scrollOffset = initialScrollOffset; _toEndAnimation = new AnimatedSimulation(_setScrollOffset); _toOffsetAnimation = new ValueAnimation() ..addListener(() { @@ -261,8 +265,13 @@ class ScrollableViewport extends Scrollable { ScrollableViewport({ Key key, this.child, + double initialScrollOffset, ScrollDirection scrollDirection: ScrollDirection.vertical - }) : super(key: key, scrollDirection: scrollDirection); + }) : super( + key: key, + scrollDirection: scrollDirection, + initialScrollOffset: initialScrollOffset + ); Widget child; @@ -312,10 +321,12 @@ class ScrollableViewport extends Scrollable { class Block extends Component { Block(this.children, { Key key, + this.initialScrollOffset, this.scrollDirection: ScrollDirection.vertical }) : super(key: key); final List children; + final double initialScrollOffset; final ScrollDirection scrollDirection; BlockDirection get _direction { @@ -326,6 +337,7 @@ class Block extends Component { Widget build() { return new ScrollableViewport( + initialScrollOffset: initialScrollOffset, scrollDirection: scrollDirection, child: new BlockBody(children, direction: _direction) ); @@ -340,10 +352,11 @@ class Block extends Component { abstract class ScrollableWidgetList extends Scrollable { ScrollableWidgetList({ Key key, + double initialScrollOffset, ScrollDirection scrollDirection: ScrollDirection.vertical, this.itemExtent, this.padding - }) : super(key: key, scrollDirection: scrollDirection) { + }) : super(key: key, initialScrollOffset: initialScrollOffset, scrollDirection: scrollDirection) { assert(itemExtent != null); } @@ -488,13 +501,19 @@ typedef Widget ItemBuilder(T item); class ScrollableList extends ScrollableWidgetList { ScrollableList({ Key key, + double initialScrollOffset, ScrollDirection scrollDirection: ScrollDirection.vertical, this.items, this.itemBuilder, this.itemsWrap: false, double itemExtent, EdgeDims padding - }) : super(key: key, scrollDirection: scrollDirection, itemExtent: itemExtent, padding: padding); + }) : super( + key: key, + initialScrollOffset: initialScrollOffset, + scrollDirection: scrollDirection, + itemExtent: itemExtent, + padding: padding); List items; ItemBuilder itemBuilder; @@ -526,6 +545,7 @@ class ScrollableList extends ScrollableWidgetList { class PageableList extends ScrollableList { PageableList({ Key key, + double initialScrollOffset, ScrollDirection scrollDirection: ScrollDirection.horizontal, List items, ItemBuilder itemBuilder, @@ -536,6 +556,7 @@ class PageableList extends ScrollableList { this.curve: ease }) : super( key: key, + initialScrollOffset: initialScrollOffset, scrollDirection: scrollDirection, items: items, itemBuilder: itemBuilder, @@ -587,10 +608,11 @@ class PageableList extends ScrollableList { class ScrollableMixedWidgetList extends Scrollable { ScrollableMixedWidgetList({ Key key, + double initialScrollOffset, this.builder, this.token, this.layoutState - }) : super(key: key); + }) : super(key: key, initialScrollOffset: initialScrollOffset); IndexedBuilder builder; Object token;