CustomScrollView class
A ScrollView that creates custom scroll effects using slivers.
A CustomScrollView lets you supply slivers directly to create various scrolling effects, such as lists, grids, and expanding headers. For example, to create a scroll view that contains an expanding app bar followed by a list and a grid, use a list of three slivers: SliverAppBar, SliverList, and SliverGrid.
Widgets in these slivers must produce RenderSliver objects.
To control the initial scroll offset of the scroll view, provide a controller with its ScrollController.initialScrollOffset property set.
Sample code
This sample code shows a scroll view that contains a flexible pinned app bar, a grid, and an infinite list.
CustomScrollView(
slivers: <Widget>[
const SliverAppBar(
pinned: true,
expandedHeight: 250.0,
flexibleSpace: FlexibleSpaceBar(
title: Text('Demo'),
),
),
SliverGrid(
gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 200.0,
mainAxisSpacing: 10.0,
crossAxisSpacing: 10.0,
childAspectRatio: 4.0,
),
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
alignment: Alignment.center,
color: Colors.teal[100 * (index % 9)],
child: Text('grid item $index'),
);
},
childCount: 20,
),
),
SliverFixedExtentList(
itemExtent: 50.0,
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return Container(
alignment: Alignment.center,
color: Colors.lightBlue[100 * (index % 9)],
child: Text('list item $index'),
);
},
),
),
],
)
See also:
- SliverList, which is a sliver that displays linear list of children.
- SliverFixedExtentList, which is a more efficient sliver that displays linear list of children that have the same extent along the scroll axis.
- SliverGrid, which is a sliver that displays a 2D array of children.
- SliverPadding, which is a sliver that adds blank space around another sliver.
- SliverAppBar, which is a sliver that displays a header that can expand and float as the scroll view scrolls.
- ScrollNotification and NotificationListener, which can be used to watch the scroll position without using a ScrollController.
- Inheritance
- Object
- Diagnosticable
- DiagnosticableTree
- Widget
- StatelessWidget
- ScrollView
- CustomScrollView
Constructors
-
CustomScrollView({Key key, Axis scrollDirection: Axis.vertical, bool reverse: false, ScrollController controller, bool primary, ScrollPhysics physics, bool shrinkWrap: false, double cacheExtent, List<
Widget> slivers: const[] }) - Creates a ScrollView that creates custom scroll effects using slivers. [...]
Properties
-
slivers
→ List<
Widget> -
The slivers to place inside the viewport.
final
- cacheExtent → double
-
The viewport has an area before and after the visible area to cache items
that are about to become visible when the user scrolls. [...]
final, inherited
- controller → ScrollController
-
An object that can be used to control the position to which this scroll
view is scrolled. [...]
final, inherited
- hashCode → int
-
The hash code for this object. [...]
read-only, inherited
- key → Key
-
Controls how one widget replaces another widget in the tree. [...]
final, inherited
- physics → ScrollPhysics
-
How the scroll view should respond to user input. [...]
final, inherited
- primary → bool
-
Whether this is the primary scroll view associated with the parent
PrimaryScrollController
. [...]final, inherited - reverse → bool
-
Whether the scroll view scrolls in the reading direction. [...]
final, inherited
- runtimeType → Type
-
A representation of the runtime type of the object.
read-only, inherited
- scrollDirection → Axis
-
The axis along which the scroll view scrolls. [...]
final, inherited
- shrinkWrap → bool
-
Whether the extent of the scroll view in the
scrollDirection
should be determined by the contents being viewed. [...]final, inherited
Methods
-
buildSlivers(
BuildContext context) → List< Widget> - Build the list of widgets to place inside the viewport. [...]
-
build(
BuildContext context) → Widget -
Describes the part of the user interface represented by this widget. [...]
inherited
-
buildViewport(
BuildContext context, ViewportOffset offset, AxisDirection axisDirection, List< Widget> slivers) → Widget -
Build the viewport. [...]
@protected, inherited
-
createElement(
) → StatelessElement -
Creates a StatelessElement to manage this widget's location in the tree. [...]
inherited
-
debugDescribeChildren(
) → List< DiagnosticsNode> -
Returns a list of DiagnosticsNode objects describing this node's
children. [...]
@protected, inherited
-
debugFillProperties(
DiagnosticPropertiesBuilder properties) → void -
inherited
-
getDirection(
BuildContext context) → AxisDirection -
Returns the AxisDirection in which the scroll view scrolls. [...]
@protected, inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a non-existent 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 toStringDeep. [...]
inherited
-
toString(
{DiagnosticLevel minLevel: DiagnosticLevel.debug }) → String -
Returns a string representation of this object.
inherited
-
toStringDeep(
{String prefixLineOne: '', String prefixOtherLines, DiagnosticLevel minLevel: DiagnosticLevel.debug }) → 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 ==(
dynamic other) → bool -
The equality operator. [...]
inherited