TrackingScrollController class

A ScrollController whose initialScrollOffset tracks its most recently updated ScrollPosition.

This class can be used to synchronize the scroll offset of two or more lazily created scroll views that share a single TrackingScrollController. It tracks the most recently updated scroll position and reports it as its initialScrollOffset.

Sample code

In this example each PageView page contains a ListView and all three ListView's share a TrackingScrollController. The scroll offsets of all three list views will track each other, to the extent that's possible given the different list lengths.

new PageView(
  children: <Widget>[
    new ListView(
      controller: _trackingScrollController,
      children: new List<Widget>.generate(100, (int i) => new Text('page 0 item $i')).toList(),
    ),
   new ListView(
     controller: _trackingScrollController,
     children: new List<Widget>.generate(200, (int i) => new Text('page 1 item $i')).toList(),
   ),
   new ListView(
     controller: _trackingScrollController,
     children: new List<Widget>.generate(300, (int i) => new Text('page 2 item $i')).toList(),
    ),
  ],
)

In this example the _trackingController would have been created by the stateful widget that built the widget tree.

Inheritance

Constructors

TrackingScrollController({double initialScrollOffset: 0.0, bool keepScrollOffset: true, String debugLabel })
Creates a scroll controller that continually updates its initialScrollOffset to match the last scroll notification it received.

Properties

initialScrollOffset double
Returns the scroll offset of the mostRecentlyUpdatedPosition or, if that is null, the initial scroll offset provided to the constructor. [...]
read-only
mostRecentlyUpdatedPosition ScrollPosition
The last ScrollPosition to change. Returns null if there aren't any attached scroll positions, or there hasn't been any scrolling yet, or the last ScrollPosition to change has since been removed.
read-only
debugLabel String
A label that is used in the toString output. Intended to aid with identifying scroll controller instances in debug output.
final, inherited
hasClients bool
Whether any ScrollPosition objects have attached themselves to the ScrollController using the attach method. [...]
read-only, inherited
hashCode int
The hash code for this object. [...]
read-only, inherited
hasListeners bool
Whether any listeners are currently registered. [...]
@protected, read-only, inherited
keepScrollOffset bool
Each time a scroll completes, save the current scroll offset with PageStorage and restore it if this controller's scrollable is recreated. [...]
final, inherited
offset double
The current scroll offset of the scrollable widget. [...]
read-only, inherited
position ScrollPosition
Returns the attached ScrollPosition, from which the actual scroll offset of the ScrollView can be obtained. [...]
read-only, inherited
positions Iterable<ScrollPosition>
The currently attached positions. [...]
@protected, read-only, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited

Methods

attach(ScrollPosition position) → void
Register the given position with this controller. [...]
detach(ScrollPosition position) → void
Unregister the given position with this controller. [...]
dispose() → void
addListener(VoidCallback listener) → void
Register a closure to be called when the object changes. [...]
inherited
animateTo(double offset, { Duration duration, Curve curve }) Future<Null>
Animates the position from its current value to the given value. [...]
inherited
createScrollPosition(ScrollPhysics physics, ScrollContext context, ScrollPosition oldPosition) ScrollPosition
Creates a ScrollPosition for use by a Scrollable widget. [...]
inherited
debugFillDescription(List<String> description) → void
Add additional information to the given description for use by toString. [...]
@mustCallSuper, inherited
jumpTo(double value) → void
Jumps the scroll position from its current value to the given value, without animation, and without checking if the new value is in range. [...]
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
inherited
notifyListeners() → void
Call all the registered listeners. [...]
@protected, inherited
removeListener(VoidCallback listener) → void
Remove a previously registered closure from the list of closures that are notified when the object changes. [...]
inherited
toString() String
Returns a string representation of this object.
inherited

Operators

operator ==(dynamic other) bool
The equality operator. [...]
inherited