RenderViewport class
A render object that is bigger on the inside.
RenderViewport is the visual workhorse of the scrolling machinery. It displays a subset of its children according to its own dimensions and the given offset. As the offset varies, different children are visible through the viewport.
RenderViewport hosts a bidirectional list of slivers in a single shared Axis, anchored on a center sliver, which is placed at the zero scroll offset. The center widget is displayed in the viewport according to the anchor property.
Slivers that are earlier in the child list than center are displayed in reverse order in the reverse axisDirection starting from the center. For example, if the axisDirection is AxisDirection.down, the first sliver before center is placed above the center. The slivers that are later in the child list than center are placed in order in the axisDirection. For example, in the preceding scenario, the first sliver after center is placed below the center.
Most scroll views by default are ordered GrowthDirection.forward. Changing the default values of ScrollView.anchor, ScrollView.center, or both, can configure a scroll view for GrowthDirection.reverse.
To create a local project with this code sample, run:
flutter create --sample=cupertino.GrowthDirection.1 mysample
RenderViewport cannot contain RenderBox children directly. Instead, use a RenderSliverList, RenderSliverFixedExtentList, RenderSliverGrid, or a RenderSliverToBoxAdapter, for example.
See also:
- RenderSliver, which explains more about the Sliver protocol.
- RenderBox, which explains more about the Box protocol.
- RenderSliverToBoxAdapter, which allows a RenderBox object to be placed inside a RenderSliver (the opposite of this class).
- RenderShrinkWrappingViewport, a variant of RenderViewport that shrink-wraps its contents along the main axis.
- Inheritance
-
- Object
- RenderObject
- RenderBox
- RenderViewportBase<
SliverPhysicalContainerParentData> - RenderViewport
- Implementers
Constructors
-
RenderViewport({AxisDirection axisDirection = AxisDirection.down, required AxisDirection crossAxisDirection, required ViewportOffset offset, double anchor = 0.0, List<
RenderSliver> ? children, RenderSliver? center, double? cacheExtent, CacheExtentStyle cacheExtentStyle = CacheExtentStyle.pixel, Clip clipBehavior = Clip.hardEdge}) - Creates a viewport for RenderSliver objects.
Properties
- alwaysNeedsCompositing → bool
-
Whether this render object always needs compositing.
no setterinherited
- anchor ↔ double
-
The relative position of the zero scroll offset.
getter/setter pair
- attached → bool
-
Whether the render tree this render object belongs to is attached to a PipelineOwner.
no setterinherited
- axis → Axis
-
The axis along which the viewport scrolls.
no setterinherited
- axisDirection ↔ AxisDirection
-
The direction in which the SliverConstraints.scrollOffset increases.
getter/setter pairinherited
- 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.
getter/setter pairinherited
- cacheExtentStyle ↔ CacheExtentStyle
-
Controls how the cacheExtent is interpreted.
getter/setter pairinherited
- center ↔ RenderSliver?
-
The first child in the GrowthDirection.forward growth direction.
getter/setter pair
- childCount → int
-
The number of children.
no setterinherited
-
childrenInHitTestOrder
→ Iterable<
RenderSliver> -
Provides an iterable that walks the children of the viewport, in the order
that hit-testing should use.
no setteroverride
-
childrenInPaintOrder
→ Iterable<
RenderSliver> -
Provides an iterable that walks the children of the viewport, in the order
that they should be painted.
no setteroverride
- clipBehavior ↔ Clip
-
The content will be clipped (or not) according to this option.
getter/setter pairinherited
- constraints → BoxConstraints
-
The box constraints most recently received from the parent.
no setterinherited
- crossAxisDirection ↔ AxisDirection
-
The direction in which child should be laid out in the cross axis.
getter/setter pairinherited
- debugCanParentUseSize → bool
-
Whether the parent render object is permitted to use this render object's
size.
no setterinherited
- debugCreator ↔ Object?
-
The object responsible for creating this render object.
getter/setter pairinherited
- debugDisposed → bool?
-
Whether this has been disposed.
no setterinherited
- debugDoingThisLayout → bool
-
Whether performLayout for this render object is currently running.
no setterinherited
- debugDoingThisLayoutWithCallback → bool
-
Whether invokeLayoutCallback for this render object is currently running.
no setterinherited
- debugDoingThisPaint → bool
-
Whether paint for this render object is currently running.
no setterinherited
- debugDoingThisResize → bool
-
Whether performResize for this render object is currently running.
no setterinherited
- debugLayer → ContainerLayer?
-
In debug mode, the compositing layer that this render object uses to repaint.
no setterinherited
- debugLayoutParent → RenderObject?
-
The RenderObject that's expected to call layout on this RenderObject
in its performLayout implementation.
no setterinherited
- debugNeedsCompositedLayerUpdate → bool
-
Whether this render object's layer information is dirty.
no setterinherited
- debugNeedsLayout → bool
-
Whether this render object's layout information is dirty.
no setterinherited
- debugNeedsPaint → bool
-
Whether this render object's paint information is dirty.
no setterinherited
- debugSemantics → SemanticsNode?
-
The semantics of this render object.
no setterinherited
- depth → int
-
The depth of this render object in the render tree.
no setterinherited
- firstChild → RenderSliver?
-
The first child in the child list.
no setterinherited
- hashCode → int
-
The hash code for this object.
no setterinherited
- hasSize → bool
-
Whether this render object has undergone layout and has a size.
no setterinherited
- hasVisualOverflow → bool
-
Whether the contents of this viewport would paint outside the bounds of
the viewport if paint did not clip.
no setteroverride
- indexOfFirstChild → int
-
The index of the first child of the viewport relative to the center child.
no setteroverride
- isRepaintBoundary → bool
-
Whether this render object repaints separately from its parent.
no setterinherited
- lastChild → RenderSliver?
-
The last child in the child list.
no setterinherited
- layer ↔ ContainerLayer?
-
The compositing layer that this render object uses to repaint.
getter/setter pairinherited
- needsCompositing → bool
-
Whether we or one of our descendants has a compositing layer.
no setterinherited
- offset ↔ ViewportOffset
-
Which part of the content inside the viewport should be visible.
getter/setter pairinherited
- owner → PipelineOwner?
-
The owner for this render object (null if unattached).
no setterinherited
- paintBounds → Rect
-
Returns a rectangle that contains all the pixels painted by this box.
no setterinherited
- parent → RenderObject?
-
The parent of this render object in the render tree.
no setterinherited
- parentData ↔ ParentData?
-
Data for use by the parent render object.
getter/setter pairinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- semanticBounds → Rect
-
The bounding box, in the local coordinate system, of this
object, for accessibility purposes.
no setterinherited
- size ↔ Size
-
The size of this render box computed during layout.
getter/setter pairinherited
- sizedByParent → bool
-
Whether the constraints are the only input to the sizing algorithm (in
particular, child nodes have no impact).
no setteroverride
Methods
-
add(
RenderSliver child) → void -
Append child to the end of this render object's child list.
inherited
-
addAll(
List< RenderSliver> ? children) → void -
Add all the children to the end of this render object's child list.
inherited
-
adoptChild(
RenderObject child) → void -
Called by subclasses when they decide a render object is a child.
inherited
-
applyPaintTransform(
covariant RenderObject child, Matrix4 transform) → void -
Multiply the transform from the parent's coordinate system to this box's
coordinate system into the given transform.
override
-
assembleSemanticsNode(
SemanticsNode node, SemanticsConfiguration config, Iterable< SemanticsNode> children) → void -
Assemble the SemanticsNode for this RenderObject.
inherited
-
attach(
PipelineOwner owner) → void -
Mark this render object as attached to the given owner.
inherited
-
childAfter(
RenderSliver child) → RenderSliver? -
The next child after the given child in the child list.
inherited
-
childBefore(
RenderSliver child) → RenderSliver? -
The previous child before the given child in the child list.
inherited
-
clearSemantics(
) → void -
Removes all semantics from this render object and its descendants.
inherited
-
computeAbsolutePaintOffset(
RenderSliver child, double layoutOffset, GrowthDirection growthDirection) → Offset -
The offset at which the given
child
should be painted.inherited -
computeChildMainAxisPosition(
RenderSliver child, double parentMainAxisPosition) → double -
Converts the
parentMainAxisPosition
into the child's coordinate system.override -
computeDistanceToActualBaseline(
TextBaseline baseline) → double? -
Returns the distance from the y-coordinate of the position of the box to
the y-coordinate of the first given baseline in the box's contents, if
any, or null otherwise.
inherited
-
computeDryBaseline(
covariant BoxConstraints constraints, TextBaseline baseline) → double? -
Computes the value returned by getDryBaseline.
inherited
-
computeDryLayout(
covariant BoxConstraints constraints) → Size -
Computes the value returned by getDryLayout. Do not call this
function directly, instead, call getDryLayout.
override
-
computeMaxIntrinsicHeight(
double width) → double -
Computes the value returned by getMaxIntrinsicHeight. Do not call this
function directly, instead, call getMaxIntrinsicHeight.
inherited
-
computeMaxIntrinsicWidth(
double height) → double -
Computes the value returned by getMaxIntrinsicWidth. Do not call this
function directly, instead, call getMaxIntrinsicWidth.
inherited
-
computeMinIntrinsicHeight(
double width) → double -
Computes the value returned by getMinIntrinsicHeight. Do not call this
function directly, instead, call getMinIntrinsicHeight.
inherited
-
computeMinIntrinsicWidth(
double height) → double -
Computes the value returned by getMinIntrinsicWidth. Do not call this
function directly, instead, call getMinIntrinsicWidth.
inherited
-
debugAdoptSize(
Size value) → Size -
Claims ownership of the given Size.
inherited
-
debugAssertDoesMeetConstraints(
) → void -
Verify that the object's constraints are being met. Override this function
in a subclass to verify that your state matches the constraints object.
This function is only called when asserts are enabled (i.e. in debug mode)
and only when needsLayout is false. If the constraints are not met, it
should assert or throw an exception.
inherited
-
debugCannotComputeDryLayout(
{String? reason, FlutterError? error}) → bool -
Called from computeDryLayout or computeDryBaseline within an assert if
the given RenderBox subclass does not support calculating a dry layout.
inherited
-
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
-
debugHandleEvent(
PointerEvent event, HitTestEntry< HitTestTarget> entry) → bool -
Implements the debugPaintPointersEnabled debugging feature.
inherited
-
debugPaint(
PaintingContext context, Offset offset) → void -
Override this method to paint debugging information.
inherited
-
debugPaintBaselines(
PaintingContext context, Offset offset) → void -
In debug mode, paints a line for each baseline.
inherited
-
debugPaintPointers(
PaintingContext context, Offset offset) → void -
In debug mode, paints a rectangle if this render box has counted more
pointer downs than pointer up events.
inherited
-
debugPaintSize(
PaintingContext context, Offset offset) → void -
In debug mode, paints a border around this render box.
inherited
-
debugRegisterRepaintBoundaryPaint(
{bool includedParent = true, bool includedChild = false}) → void -
Called, in debug mode, if isRepaintBoundary is true, when either the
this render object or its parent attempt to paint.
inherited
-
debugResetSize(
) → void -
If a subclass has a "size" (the state controlled by
parentUsesSize
, whatever it is in the subclass, e.g. the actualsize
property of RenderBox), and the subclass verifies that in debug mode this "size" property isn't used when debugCanParentUseSize isn't set, then that subclass should override debugResetSize to reapply the current values of debugCanParentUseSize to that state.inherited -
debugThrowIfNotCheckingIntrinsics(
) → bool -
Throws an exception saying that the object does not support returning
intrinsic dimensions if, in debug mode, we are not in the
RenderObject.debugCheckingIntrinsics mode.
inherited
-
debugValidateChild(
RenderObject child) → bool -
Checks whether the given render object has the correct runtimeType to be
a child of this render object.
inherited
-
describeApproximatePaintClip(
covariant RenderSliver child) → Rect? -
Returns a rect in this object's coordinate system that describes
the approximate bounding box of the clip rect that would be
applied to the given child during the paint phase, if any.
inherited
-
describeForError(
String name, {DiagnosticsTreeStyle style = DiagnosticsTreeStyle.shallow}) → DiagnosticsNode -
Adds a debug representation of a RenderObject optimized for including in
error messages.
inherited
-
describeSemanticsClip(
covariant RenderSliver? child) → Rect -
Returns a rect in this object's coordinate system that describes
which SemanticsNodes produced by the
child
should be included in the semantics tree. SemanticsNodes from thechild
that are positioned outside of this rect will be dropped. Child SemanticsNodes that are positioned inside this rect, but outside of describeApproximatePaintClip will be included in the tree marked as hidden. Child SemanticsNodes that are inside of both rect will be included in the tree as regular nodes.inherited -
describeSemanticsConfiguration(
SemanticsConfiguration config) → void -
Report the semantics of this node, for example for accessibility purposes.
inherited
-
detach(
) → void -
Mark this render object as detached from its PipelineOwner.
inherited
-
dispose(
) → void -
Release any resources held by this render object.
inherited
-
dropChild(
RenderObject child) → void -
Called by subclasses when they decide a render object is no longer a child.
inherited
-
getDistanceToActualBaseline(
TextBaseline baseline) → double? -
Calls computeDistanceToActualBaseline and caches the result.
inherited
-
getDistanceToBaseline(
TextBaseline baseline, {bool onlyReal = false}) → double? -
Returns the distance from the y-coordinate of the position of the box to
the y-coordinate of the first given baseline in the box's contents.
inherited
-
getDryBaseline(
covariant BoxConstraints constraints, TextBaseline baseline) → double? -
Returns the distance from the top of the box to the first baseline of the
box's contents for the given
constraints
, ornull
if this RenderBox does not have any baselines.inherited -
getDryLayout(
covariant BoxConstraints constraints) → Size -
Returns the Size that this RenderBox would like to be given the
provided BoxConstraints.
inherited
-
getMaxIntrinsicHeight(
double width) → double -
Returns the smallest height beyond which increasing the height never
decreases the preferred width. The preferred width is the value that
would be returned by getMinIntrinsicWidth for that height.
inherited
-
getMaxIntrinsicWidth(
double height) → double -
Returns the smallest width beyond which increasing the width never
decreases the preferred height. The preferred height is the value that
would be returned by getMinIntrinsicHeight for that width.
inherited
-
getMinIntrinsicHeight(
double width) → double -
Returns the minimum height that this box could be without failing to
correctly paint its contents within itself, without clipping.
inherited
-
getMinIntrinsicWidth(
double height) → double -
Returns the minimum width that this box could be without failing to
correctly paint its contents within itself, without clipping.
inherited
-
getOffsetToReveal(
RenderObject target, double alignment, {Rect? rect, Axis? axis}) → RevealedOffset -
Returns the offset that would be needed to reveal the
target
RenderObject.inherited -
getTransformTo(
RenderObject? target) → Matrix4 -
Applies the paint transform from this RenderObject to the
target
RenderObject.inherited -
globalToLocal(
Offset point, {RenderObject? ancestor}) → Offset -
Convert the given point from the global coordinate system in logical pixels
to the local coordinate system for this box.
inherited
-
handleEvent(
PointerEvent event, covariant BoxHitTestEntry entry) → void -
Override this method to handle pointer events that hit this render object.
inherited
-
hitTest(
BoxHitTestResult result, {required Offset position}) → bool -
Determines the set of render objects located at the given position.
inherited
-
hitTestChildren(
BoxHitTestResult result, {required Offset position}) → bool -
Override this method to check whether any children are located at the
given position.
inherited
-
hitTestSelf(
Offset position) → bool -
Override this method if this render object can be hit even if its
children were not hit.
inherited
-
insert(
RenderSliver child, {RenderSliver? after}) → void -
Insert child into this render object's child list after the given child.
inherited
-
invokeLayoutCallback<
T extends Constraints> (LayoutCallback< T> callback) → void -
Allows mutations to be made to this object's child list (and any
descendants) as well as to any other dirty nodes in the render tree owned
by the same PipelineOwner as this object. The
callback
argument is invoked synchronously, and the mutations are allowed only during that callback's execution.inherited -
labelForChild(
int index) → String -
A short string to identify the child with the given index.
override
-
layout(
Constraints constraints, {bool parentUsesSize = false}) → void -
Compute the layout for this render object.
inherited
-
layoutChildSequence(
{required RenderSliver? child, required double scrollOffset, required double overlap, required double layoutOffset, required double remainingPaintExtent, required double mainAxisExtent, required double crossAxisExtent, required GrowthDirection growthDirection, required RenderSliver? advance(RenderSliver child), required double remainingCacheExtent, required double cacheOrigin}) → double -
Determines the size and position of some of the children of the viewport.
inherited
-
localToGlobal(
Offset point, {RenderObject? ancestor}) → Offset -
Convert the given point from the local coordinate system for this box to
the global coordinate system in logical pixels.
inherited
-
markNeedsCompositedLayerUpdate(
) → void -
Mark this render object as having changed a property on its composited
layer.
inherited
-
markNeedsCompositingBitsUpdate(
) → void -
Mark the compositing state for this render object as dirty.
inherited
-
markNeedsLayout(
) → void -
Mark this render object's layout information as dirty, and either register
this object with its PipelineOwner, or defer to the parent, depending on
whether this object is a relayout boundary or not respectively.
inherited
-
markNeedsLayoutForSizedByParentChange(
) → void -
Mark this render object's layout information as dirty (like
markNeedsLayout), and additionally also handle any necessary work to
handle the case where sizedByParent has changed value.
inherited
-
markNeedsPaint(
) → void -
Mark this render object as having changed its visual appearance.
inherited
-
markNeedsSemanticsUpdate(
) → void -
Mark this node as needing an update to its semantics description.
inherited
-
markParentNeedsLayout(
) → void -
Mark this render object's layout information as dirty, and then defer to
the parent.
inherited
-
maxScrollObstructionExtentBefore(
RenderSliver child) → double -
Returns the total scroll obstruction extent of all slivers in the viewport
before
child
.override -
move(
RenderSliver child, {RenderSliver? after}) → void -
Move the given
child
in the child list to be after another child.inherited -
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
paint(
PaintingContext context, Offset offset) → void -
Paint this render object into the given context at the given offset.
inherited
-
paintOffsetOf(
RenderSliver child) → Offset -
The offset at which the given
child
should be painted.override -
paintsChild(
covariant RenderObject child) → bool -
Whether the given child would be painted if paint were called.
inherited
-
performLayout(
) → void -
Do the work of computing the layout for this render object.
override
-
performResize(
) → void -
Updates the render objects size using only the constraints.
inherited
-
reassemble(
) → void -
Cause the entire subtree rooted at the given RenderObject to be marked
dirty for layout, paint, etc, so that the effects of a hot reload can be
seen, or so that the effect of changing a global debug flag (such as
debugPaintSizeEnabled) can be applied.
inherited
-
redepthChild(
RenderObject child) → void -
Adjust the depth of the given
child
to be greater than this node's own depth.inherited -
redepthChildren(
) → void -
Adjust the depth of this node's children, if any.
inherited
-
remove(
RenderSliver child) → void -
Remove this child from the child list.
inherited
-
removeAll(
) → void -
Remove all their children from this render object's child list.
inherited
-
replaceRootLayer(
OffsetLayer rootLayer) → void -
Replace the layer. This is only valid for the root of a render
object subtree (whatever object scheduleInitialPaint was
called on).
inherited
-
scheduleInitialLayout(
) → void -
Bootstrap the rendering pipeline by scheduling the very first layout.
inherited
-
scheduleInitialPaint(
ContainerLayer rootLayer) → void -
Bootstrap the rendering pipeline by scheduling the very first paint.
inherited
-
scheduleInitialSemantics(
) → void -
Bootstrap the semantics reporting mechanism by marking this node
as needing a semantics update.
inherited
-
scrollOffsetOf(
RenderSliver child, double scrollOffsetWithinChild) → double -
Returns the scroll offset within the viewport for the given
scrollOffsetWithinChild
within the givenchild
.override -
sendSemanticsEvent(
SemanticsEvent semanticsEvent) → void -
Sends a SemanticsEvent associated with this render object's SemanticsNode.
inherited
-
setupParentData(
covariant RenderObject child) → void -
Override to setup parent data correctly for your children.
override
-
showOnScreen(
{RenderObject? descendant, Rect? rect, Duration duration = Duration.zero, Curve curve = Curves.ease}) → void -
Attempt to make (a portion of) this or a descendant RenderObject visible
on screen.
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}) → String -
Returns a description of the tree rooted at this node.
If the prefix argument is provided, then every line in the output
will be prefixed by that string.
inherited
-
toStringShallow(
{String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String -
Returns a one-line detailed description of the render object.
This description is often somewhat long.
inherited
-
toStringShort(
) → String -
Returns a human understandable name.
inherited
-
updateChildLayoutOffset(
RenderSliver child, double layoutOffset, GrowthDirection growthDirection) → void -
Called during layoutChildSequence to store the layout offset for the
given child.
override
-
updateCompositedLayer(
{required covariant OffsetLayer? oldLayer}) → OffsetLayer -
Update the composited layer owned by this render object.
inherited
-
updateOutOfBandData(
GrowthDirection growthDirection, SliverGeometry childLayoutGeometry) → void -
Called during layoutChildSequence for each child.
override
-
visitChildren(
RenderObjectVisitor visitor) → void -
Calls visitor for each immediate child of this render object.
inherited
-
visitChildrenForSemantics(
RenderObjectVisitor visitor) → void -
Called when collecting the semantics of this node.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Constants
- excludeFromScrolling → const SemanticsTag
- When a top-level SemanticsNode below a RenderAbstractViewport is tagged with excludeFromScrolling it will not be part of the scrolling area for semantic purposes.
- useTwoPaneSemantics → const SemanticsTag
- If a RenderAbstractViewport overrides RenderObject.describeSemanticsConfiguration to add the SemanticsTag useTwoPaneSemantics to its SemanticsConfiguration, two semantics nodes will be used to represent the viewport with its associated scrolling actions in the semantics tree.