build method
Builds the widget tree for this layout container.
This method creates a scrolling client that wraps a viewport. The process:
- Resolves text direction from ambient Directionality if not specified
- Creates scroll details for horizontal and vertical scrolling
- Resolves border radius for proper RTL support
- Returns a
ScrollableClient
containing a LayoutBoxViewport
The resulting widget tree provides full scrolling support with the specified layout algorithm managing child positioning.
Implementation
@override
Widget build(BuildContext context) {
final textDirection =
this.textDirection ??
Directionality.maybeOf(context) ??
TextDirection.ltr;
final horizontalDetails = ScrollableDetails.horizontal(
controller: horizontalController,
reverse: reverseHorizontalScroll,
physics: !horizontalOverflow.scrollable
? const NeverScrollableScrollPhysics()
: null,
);
final verticalDetails = ScrollableDetails.vertical(
controller: verticalController,
reverse: reverseVerticalScroll,
physics: !verticalOverflow.scrollable
? const NeverScrollableScrollPhysics()
: null,
);
final resolvedBorderRadius =
borderRadius?.resolve(textDirection) ?? BorderRadius.zero;
return ScrollableClient(
diagonalDragBehavior: diagonalDragBehavior,
horizontalDetails: horizontalDetails,
verticalDetails: verticalDetails,
builder: (context, verticalPosition, horizontalPosition) {
return LayoutBoxViewport(
textDirection: textDirection,
reversePaint: reversePaint,
mainScrollDirection: mainScrollDirection,
horizontal: horizontalPosition,
vertical: verticalPosition,
horizontalAxisDirection: horizontalDetails.direction,
verticalAxisDirection: verticalDetails.direction,
layout: layout,
horizontalOverflow: horizontalOverflow,
verticalOverflow: verticalOverflow,
textBaseline: textBaseline,
borderRadius: resolvedBorderRadius,
clipBehavior: clipBehavior,
children: children,
);
},
);
}