diff --git a/packages/flutter/lib/src/rendering/wrap.dart b/packages/flutter/lib/src/rendering/wrap.dart index b97e44fd2b..bfde2603cb 100644 --- a/packages/flutter/lib/src/rendering/wrap.dart +++ b/packages/flutter/lib/src/rendering/wrap.dart @@ -608,8 +608,7 @@ class RenderWrap extends RenderBox with ContainerRenderObjectMixin mainAxisLimit) { - assert(childCount > 0); + if (childCount > 0 && runMainAxisExtent + spacing + childMainAxisExtent > mainAxisLimit) { mainAxisExtent = math.max(mainAxisExtent, runMainAxisExtent); crossAxisExtent += runCrossAxisExtent; if (runMetrics.isNotEmpty) diff --git a/packages/flutter/test/widgets/wrap_test.dart b/packages/flutter/test/widgets/wrap_test.dart index 3cf2088c2d..174604a629 100644 --- a/packages/flutter/test/widgets/wrap_test.dart +++ b/packages/flutter/test/widgets/wrap_test.dart @@ -851,4 +851,19 @@ void main() { const Offset(0.0, 20.0) ]); }); + + testWidgets('Object exactly matches container width', (WidgetTester tester) async { + await tester.pumpWidget(new Wrap( + direction: Axis.horizontal, + textDirection: TextDirection.ltr, + spacing: 10.0, + runSpacing: 10.0, + children: [ + const SizedBox(width: 800.0, height: 0.0), + ], + )); + + expect(tester.renderObject(find.byType(Wrap)).size, equals(const Size(800.0, 600.0))); + verify(tester, [const Offset(0.0, 0.0)]); + }); }