Scrollable class
A widget that manages scrolling in one dimension and informs the Viewport through which the content is viewed.
Scrollable implements the interaction model for a scrollable widget, including gesture recognition, but does not have an opinion about how the viewport, which actually displays the children, is constructed.
It's rare to construct a Scrollable directly. Instead, consider ListView or GridView, which combine scrolling, viewporting, and a layout model. To combine layout models (or to use a custom layout mode), consider using CustomScrollView.
The static Scrollable.of and Scrollable.ensureVisible functions are often used to interact with the Scrollable widget inside a ListView or a GridView.
To further customize scrolling behavior with a Scrollable:
-
You can provide a viewportBuilder to customize the child model. For example, SingleChildScrollView uses a viewport that displays a single box child whereas CustomScrollView uses a Viewport or a ShrinkWrappingViewport, both of which display a list of slivers.
-
You can provide a custom ScrollController that creates a custom ScrollPosition subclass. For example, PageView uses a PageController, which creates a page-oriented scroll position subclass that keeps the same page visible when the Scrollable resizes.
Persisting the scroll position during a session
Scrollables attempt to persist their scroll position using PageStorage. This can be disabled by setting ScrollController.keepScrollOffset to false on the controller. If it is enabled, using a PageStorageKey for the key of this widget (or one of its ancestors, e.g. a ScrollView) is recommended to help disambiguate different Scrollables from each other.
See also:
- ListView, which is a commonly used ScrollView that displays a scrolling, linear list of child widgets.
- PageView, which is a scrolling list of child widgets that are each the size of the viewport.
- GridView, which is a ScrollView that displays a scrolling, 2D array of child widgets.
- CustomScrollView, which is a ScrollView that creates custom scroll effects using slivers.
- SingleChildScrollView, which is a scrollable widget that has a single child.
- ScrollNotification and NotificationListener, which can be used to watch the scroll position without using a ScrollController.
- Inheritance
-
- Object
- DiagnosticableTree
- Widget
- StatefulWidget
- Scrollable
Constructors
- Scrollable({Key? key, AxisDirection axisDirection = AxisDirection.down, ScrollController? controller, ScrollPhysics? physics, required ViewportBuilder viewportBuilder, ScrollIncrementCalculator? incrementCalculator, bool excludeFromSemantics = false, int? semanticChildCount, DragStartBehavior dragStartBehavior = DragStartBehavior.start, String? restorationId, ScrollBehavior? scrollBehavior, Clip clipBehavior = Clip.hardEdge, HitTestBehavior hitTestBehavior = HitTestBehavior.opaque})
-
Creates a widget that scrolls.
const
Properties
- axis → Axis
-
The axis along which the scroll view scrolls.
no setter
- axisDirection → AxisDirection
-
The direction in which this widget scrolls.
final
- clipBehavior → Clip
-
The content will be clipped (or not) according to this option.
final
- controller → ScrollController?
-
An object that can be used to control the position to which this widget is
scrolled.
final
- dragStartBehavior → DragStartBehavior
-
Determines the way that drag start behavior is handled.
final
- excludeFromSemantics → bool
-
Whether the scroll actions introduced by this Scrollable are exposed
in the semantics tree.
final
- hashCode → int
-
The hash code for this object.
no setterinherited
- hitTestBehavior → HitTestBehavior
-
Defines the behavior of gesture detector used in this Scrollable.
final
- incrementCalculator → ScrollIncrementCalculator?
-
An optional function that will be called to calculate the distance to
scroll when the scrollable is asked to scroll via the keyboard using a
ScrollAction.
final
- key → Key?
-
Controls how one widget replaces another widget in the tree.
finalinherited
- physics → ScrollPhysics?
-
How the widgets should respond to user input.
final
- restorationId → String?
-
Restoration ID to save and restore the scroll offset of the scrollable.
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- scrollBehavior → ScrollBehavior?
-
A ScrollBehavior that will be applied to this widget individually.
final
- semanticChildCount → int?
-
The number of children that will contribute semantic information.
final
- viewportBuilder → ViewportBuilder
-
Builds the viewport through which the scrollable content is displayed.
final
Methods
-
createElement(
) → StatefulElement -
Creates a StatefulElement to manage this widget's location in the tree.
inherited
-
createState(
) → ScrollableState -
Creates the mutable state for this widget at a given location in the tree.
override
-
debugDescribeChildren(
) → List< DiagnosticsNode> -
Returns a list of DiagnosticsNode objects describing this node's
children.
inherited
-
debugFillProperties(
DiagnosticPropertiesBuilder properties) → void -
Add additional properties associated with the node.
override
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
toDiagnosticsNode(
{String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode -
Returns a debug representation of the object that is used by debugging
tools and by DiagnosticsNode.toStringDeep.
inherited
-
toString(
{DiagnosticLevel minLevel = DiagnosticLevel.info}) → String -
A string representation of this object.
inherited
-
toStringDeep(
{String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) → String -
Returns a string representation of this node and its descendants.
inherited
-
toStringShallow(
{String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String -
Returns a one-line detailed description of the object.
inherited
-
toStringShort(
) → String -
A short, textual description of this widget.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Methods
-
ensureVisible(
BuildContext context, {double alignment = 0.0, Duration duration = Duration.zero, Curve curve = Curves.ease, ScrollPositionAlignmentPolicy alignmentPolicy = ScrollPositionAlignmentPolicy.explicit}) → Future< void> - Scrolls all scrollables that enclose the given context so as to make the given context visible.
-
maybeOf(
BuildContext context, {Axis? axis}) → ScrollableState? - The state from the closest instance of this class that encloses the given context, or null if none is found.
-
of(
BuildContext context, {Axis? axis}) → ScrollableState - The state from the closest instance of this class that encloses the given context.
-
recommendDeferredLoadingForContext(
BuildContext context, {Axis? axis}) → bool -
Provides a heuristic to determine if expensive frame-bound tasks should be
deferred for the
context
at a specific point in time.