build method

  1. @override
Widget build(
  1. BuildContext context
)
override

Builds the widget tree for this layout container.

This method creates a scrolling client that wraps a viewport. The process:

  1. Resolves text direction from ambient Directionality if not specified
  2. Creates scroll details for horizontal and vertical scrolling
  3. Resolves border radius for proper RTL support
  4. 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,
      );
    },
  );
}