Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions boxy/lib/src/boxy/custom_boxy_base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -236,11 +236,9 @@ mixin RenderBoxyMixin<

@override
void visitChildrenForSemantics(RenderObjectVisitor visitor) {
for (final child in childHandleMap.values) {
if (!child._ignore) {
visitor(child.render);
}
}
wrapPhase(BoxyDelegatePhase.semantics, () {
delegate.visitChildrenForSemantics(visitor);
});
}

@override
Expand Down Expand Up @@ -293,6 +291,9 @@ enum BoxyDelegatePhase {

/// The boxy is currently being hit test.
hitTest,

/// Semantics are being visited.
semantics,
}

/// Cache for [Layer] objects, used by [BoxyLayerContext] methods.
Expand Down Expand Up @@ -913,6 +914,20 @@ abstract class BaseBoxyDelegate<LayoutData extends Object,
}) : _relayout = relayout,
_repaint = repaint;

/// Visits each child that should be included in the semantics tree.
///
/// The default behavior is to visit each child that is not [BaseBoxyChild.isIgnored].
///
/// This can be overridden to change the order in which children are visited
/// for accessibility purposes.
void visitChildrenForSemantics(RenderObjectVisitor visitor) {
for (final child in render.childHandleMap.values) {
if (!child.isIgnored) {
visitor(child.render);
}
}
}

final Listenable? _relayout;
final Listenable? _repaint;

Expand Down
45 changes: 39 additions & 6 deletions boxy/lib/src/boxy_flex.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1296,7 +1296,8 @@ class RenderBoxyFlex extends RenderBox
final childConstraints = BoxConstraintsAxisUtil.create(
_direction,
minCross:
_getCrossAxisAlignment(child) == CrossAxisAlignment.stretch
(_getCrossAxisAlignment(child) == CrossAxisAlignment.stretch &&
maxCrossSize.isFinite)
? maxCrossSize
: 0.0,
maxCross: maxCrossSize,
Expand Down Expand Up @@ -1343,7 +1344,7 @@ class RenderBoxyFlex extends RenderBox
if (child == dominantChild) {
flexConstraints = BoxConstraintsAxisUtil.create(
_direction,
minCross: maxCrossSize,
minCross: maxCrossSize.isFinite ? maxCrossSize : 0.0,
maxCross: maxCrossSize,
minMain: minChildExtent,
maxMain: maxChildExtent,
Expand All @@ -1352,7 +1353,8 @@ class RenderBoxyFlex extends RenderBox
flexConstraints = BoxConstraintsAxisUtil.create(
_direction,
minCross:
_getCrossAxisAlignment(child) == CrossAxisAlignment.stretch
(_getCrossAxisAlignment(child) == CrossAxisAlignment.stretch &&
maxCrossSize.isFinite)
? maxCrossSize
: 0.0,
maxCross: maxCrossSize,
Expand Down Expand Up @@ -1385,9 +1387,10 @@ class RenderBoxyFlex extends RenderBox
BoxConstraintsAxisUtil.create(
_direction,
minCross:
_getCrossAxisAlignment(child) == CrossAxisAlignment.stretch
? maxCrossSize
: 0.0,
(_getCrossAxisAlignment(child) == CrossAxisAlignment.stretch &&
maxCrossSize.isFinite)
? maxCrossSize
: 0.0,
maxCross: maxCrossSize,
minMain: mainSize,
maxMain: mainSize,
Expand Down Expand Up @@ -1626,6 +1629,36 @@ class RenderBoxyFlex extends RenderBox
}());
}

@override
void visitChildrenForSemantics(RenderObjectVisitor visitor) {
_forEachChildWithOrder(visitor);
}

void _forEachChildWithOrder(RenderObjectVisitor visitor) {
if (textDirection == null && direction == Axis.horizontal) {
return;
}
final bool flipMainAxis =
!(_startIsTopLeft(direction, textDirection, verticalDirection) ?? true);
if (flipMainAxis) {
RenderBox? child = lastChild;
while (child != null) {
final FlexParentData childParentData =
child.parentData! as FlexParentData;
visitor(child);
child = childParentData.previousSibling;
}
} else {
RenderBox? child = firstChild;
while (child != null) {
final FlexParentData childParentData =
child.parentData! as FlexParentData;
visitor(child);
child = childParentData.nextSibling;
}
}
}

@override
Rect? describeApproximatePaintClip(RenderObject child) =>
_hasOverflow ? Offset.zero & size : null;
Expand Down
2 changes: 1 addition & 1 deletion website/docs/custom-boxy/boxy-id.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ class MyBoxyDelegate extends BoxyDelegate {

// Return the size of our little column.
return Size(
max(helloSize.width, worldSize.height),
max(helloSize.width, worldSize.width),
helloSize.height + worldSize.height,
);
}
Expand Down