From c18097178c91e8440db2daf9ff56a0b48ca0cee8 Mon Sep 17 00:00:00 2001 From: Bruno Leroux Date: Sat, 7 May 2022 13:34:06 +0200 Subject: [PATCH] Fix empty Stack with infinite constraints throws (#102642) --- packages/flutter/lib/src/rendering/stack.dart | 3 +-- .../flutter/test/rendering/stack_test.dart | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/rendering/stack.dart b/packages/flutter/lib/src/rendering/stack.dart index 1e1b9b3228e7..6051178dedf8 100644 --- a/packages/flutter/lib/src/rendering/stack.dart +++ b/packages/flutter/lib/src/rendering/stack.dart @@ -520,8 +520,7 @@ class RenderStack extends RenderBox assert(_resolvedAlignment != null); bool hasNonPositionedChildren = false; if (childCount == 0) { - assert(constraints.biggest.isFinite); - return constraints.biggest; + return (constraints.biggest.isFinite) ? constraints.biggest : constraints.smallest; } double width = constraints.minWidth; diff --git a/packages/flutter/test/rendering/stack_test.dart b/packages/flutter/test/rendering/stack_test.dart index a89a47434c23..ec5eb7533a08 100644 --- a/packages/flutter/test/rendering/stack_test.dart +++ b/packages/flutter/test/rendering/stack_test.dart @@ -148,5 +148,30 @@ void main() { }); }); + test('Stack in Flex can layout with no children', () { + // Render an empty Stack in a Flex + final RenderFlex flex = RenderFlex( + textDirection: TextDirection.ltr, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + RenderStack( + textDirection: TextDirection.ltr, + children: [], + ), + ] + ); + + bool stackFlutterErrorThrown = false; + layout( + flex, + constraints: BoxConstraints.tight(const Size(100.0, 100.0)), + onErrors: () { + stackFlutterErrorThrown = true; + } + ); + + expect(stackFlutterErrorThrown, false); + }); + // More tests in ../widgets/stack_test.dart }