Skip to content

Commit 103a5c9

Browse files
authored
Overlay always applies clip (#113770)
1 parent 483e1d9 commit 103a5c9

File tree

3 files changed

+27
-8
lines changed

3 files changed

+27
-8
lines changed

packages/flutter/lib/src/widgets/overlay.dart

+3-7
Original file line numberDiff line numberDiff line change
@@ -709,8 +709,6 @@ class _RenderTheatre extends RenderBox with ContainerRenderObjectMixin<RenderBox
709709
addAll(children);
710710
}
711711

712-
bool _hasVisualOverflow = false;
713-
714712
@override
715713
void setupParentData(RenderBox child) {
716714
if (child.parentData is! StackParentData) {
@@ -836,8 +834,6 @@ class _RenderTheatre extends RenderBox with ContainerRenderObjectMixin<RenderBox
836834

837835
@override
838836
void performLayout() {
839-
_hasVisualOverflow = false;
840-
841837
if (_onstageChildCount == 0) {
842838
return;
843839
}
@@ -856,7 +852,7 @@ class _RenderTheatre extends RenderBox with ContainerRenderObjectMixin<RenderBox
856852
child.layout(nonPositionedConstraints, parentUsesSize: true);
857853
childParentData.offset = _resolvedAlignment!.alongOffset(size - child.size as Offset);
858854
} else {
859-
_hasVisualOverflow = RenderStack.layoutPositionedChild(child, childParentData, size, _resolvedAlignment!) || _hasVisualOverflow;
855+
RenderStack.layoutPositionedChild(child, childParentData, size, _resolvedAlignment!);
860856
}
861857

862858
assert(child.parentData == childParentData);
@@ -898,7 +894,7 @@ class _RenderTheatre extends RenderBox with ContainerRenderObjectMixin<RenderBox
898894

899895
@override
900896
void paint(PaintingContext context, Offset offset) {
901-
if (_hasVisualOverflow && clipBehavior != Clip.none) {
897+
if (clipBehavior != Clip.none) {
902898
_clipRectLayer.layer = context.pushClipRect(
903899
needsCompositing,
904900
offset,
@@ -939,7 +935,7 @@ class _RenderTheatre extends RenderBox with ContainerRenderObjectMixin<RenderBox
939935
case Clip.hardEdge:
940936
case Clip.antiAlias:
941937
case Clip.antiAliasWithSaveLayer:
942-
return _hasVisualOverflow ? Offset.zero & size : null;
938+
return Offset.zero & size;
943939
}
944940
}
945941

packages/flutter/test/cupertino/action_sheet_test.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -952,7 +952,7 @@ void main() {
952952
);
953953

954954
await tester.tap(find.text('Go'));
955-
await tester.pump();
955+
await tester.pumpAndSettle();
956956

957957
expect(
958958
semantics,

packages/flutter/test/widgets/overlay_test.dart

+23
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart';
66
import 'package:flutter/widgets.dart';
77
import 'package:flutter_test/flutter_test.dart';
88

9+
import '../rendering/mock_canvas.dart';
910
import 'semantics_tester.dart';
1011

1112
void main() {
@@ -1119,6 +1120,28 @@ void main() {
11191120
}
11201121
});
11211122

1123+
testWidgets('Overlay always applies clip', (WidgetTester tester) async {
1124+
await tester.pumpWidget(
1125+
Directionality(
1126+
textDirection: TextDirection.ltr,
1127+
child: Overlay(
1128+
initialEntries: <OverlayEntry>[
1129+
OverlayEntry(
1130+
builder: (BuildContext context) => Positioned(left: 10, right: 10, child: Container()),
1131+
),
1132+
],
1133+
),
1134+
),
1135+
);
1136+
final RenderObject renderObject = tester.renderObject(find.byType(Overlay));
1137+
// ignore: avoid_dynamic_calls
1138+
expect((renderObject as dynamic).paint, paints
1139+
..save()
1140+
..clipRect(rect: const Rect.fromLTWH(0.0, 0.0, 800.0, 600.0))
1141+
..restore(),
1142+
);
1143+
});
1144+
11221145
group('OverlayEntry listenable', () {
11231146
final GlobalKey overlayKey = GlobalKey();
11241147
final Widget emptyOverlay = Directionality(

0 commit comments

Comments
 (0)