Creates a widget that controls whether viewport descendants will overscroll
based on the given edge
and the inherited ClampOverscrolls widget for
the given context
. For example if edge is ScrollableEdge.leading
and a ClampOverscrolls ancestor exists that specified ScrollableEdge.trailing,
then this widget would clamp both scrollable edges.
The context
, edge
and child
arguments must not be null.
Source
factory ClampOverscrolls.inherit({ Key key, @required BuildContext context, @required ScrollableEdge edge: ScrollableEdge.none, @required Widget child }) { assert(context != null); assert(edge != null); assert(child != null); // The child's clamped edge is the union of the given edge and the // parent's clamped edge. ScrollableEdge parentEdge = ClampOverscrolls.of(context)?.edge ?? ScrollableEdge.none; ScrollableEdge childEdge = edge; switch (parentEdge) { case ScrollableEdge.leading: if (edge == ScrollableEdge.trailing || edge == ScrollableEdge.both) childEdge = ScrollableEdge.both; break; case ScrollableEdge.trailing: if (edge == ScrollableEdge.leading || edge == ScrollableEdge.both) childEdge = ScrollableEdge.both; break; case ScrollableEdge.both: childEdge = ScrollableEdge.both; break; case ScrollableEdge.none: break; } return new ClampOverscrolls( key: key, edge: childEdge, child: child ); }