A widget that uses the stack layout algorithm for its children.

This class is useful if you want to overlap several children in a simple way, for example having some text and an image, overlaid with a gradient and a button attached to the bottom.

Each child of a Stack widget is either positioned or non-positioned. Positioned children are those wrapped in a Positioned widget that has at least one non-null property. The stack sizes itself to contain all the non-positioned children, which are positioned according to alignment (which defaults to the top-left corner). The positioned children are then placed relative to the stack according to their top, right, bottom, and left properties.

The stack paints its children in order. If you want to change the order in which the children paint, you can rebuild the stack with the children in the new order. If you reorder the children in this way, consider giving the children non-null keys. These keys will cause the framework to move the underlying objects for the children to their new locations rather than recreate them at their new location.

For more details about the stack layout algorithm, see RenderStack.

If you want to lay a number of children out in a particular pattern, or if you want to make a custom layout manager, you probably want to use CustomMultiChildLayout instead. In particular, when using a Stack you can't position children relative to their size or the stack's own size.

See also:

  • Align, which sizes itself based on its child's size and positions the child according to a FractionalOffset value.
  • CustomSingleChildLayout, which uses a delegate to control the layout of a single child.
  • CustomMultiChildLayout, which uses a delegate to position multiple children.
  • Flow, which provides paint-time control of its children using transform matrices.


Stack({Key key, FractionalOffset alignment: FractionalOffset.topLeft, StackFit sizing: StackFit.loose, Overflow overflow: Overflow.clip, List<Widget> children: const [] })

Creates a stack layout widget.


alignment FractionalOffset

How to align the non-positioned children in the stack.

overflow Overflow

Whether overflowing children should be clipped. See Overflow.

sizing StackFit

How to size the non-positioned children in the stack.

→ dynamic

read / write, 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
runtimeType Type

A representation of the runtime type of the object.

read-only, inherited


operator ==(other) bool

The equality operator.



createRenderObject(BuildContext context) RenderStack

Creates an instance of the RenderObject class that this RenderObjectWidget represents, using the configuration described by this RenderObjectWidget.

updateRenderObject(BuildContext context, RenderStack renderObject) → void

Copies the configuration described by this RenderObjectWidget to the given RenderObject, which will be of the same type as returned by this object's createRenderObject.

createElement() RenderObjectElement

RenderObjectWidgets always inflate to a RenderObjectElement subclass.

debugFillDescription(List<String> description) → void

Add additional information to the given description for use by toString.

mustCallSuper, protected, inherited
didUnmountRenderObject(RenderObject, renderObject) → void

A render object previously associated with this widget has been removed from the tree. The given RenderObject will be of the same type as returned by this object's createRenderObject.

protected, inherited
noSuchMethod(Invocation invocation) → dynamic

Invoked when a non-existent method or property is accessed.

toString() String

Returns a string representation of this object.

toStringShort() String

A short, textual description of this widget.