diff --git a/packages/flutter/lib/src/rendering/wrap.dart b/packages/flutter/lib/src/rendering/wrap.dart index 749453c4ef9..cc1ae3b26ec 100644 --- a/packages/flutter/lib/src/rendering/wrap.dart +++ b/packages/flutter/lib/src/rendering/wrap.dart @@ -629,7 +629,9 @@ class RenderWrap extends RenderBox with ContainerRenderObjectMixin 0) { mainAxisExtent = math.max(mainAxisExtent, runMainAxisExtent); - crossAxisExtent += runCrossAxisExtent + runSpacing; + crossAxisExtent += runCrossAxisExtent; + if (runMetrics.isNotEmpty) + crossAxisExtent += runSpacing; runMetrics.add(new _RunMetrics(runMainAxisExtent, runCrossAxisExtent, childCount)); } diff --git a/packages/flutter/test/widgets/wrap_test.dart b/packages/flutter/test/widgets/wrap_test.dart index 20d834e6f5b..42ad54e6863 100644 --- a/packages/flutter/test/widgets/wrap_test.dart +++ b/packages/flutter/test/widgets/wrap_test.dart @@ -710,7 +710,7 @@ void main() { ), ), ); - expect(tester.renderObject(find.byType(Wrap)).size, equals(const Size(270.0, 258.0))); + expect(tester.renderObject(find.byType(Wrap)).size, equals(const Size(270.0, 250.0))); verify(tester, [ const Offset(0.0, 0.0), const Offset(22.0, 0.0), @@ -853,17 +853,46 @@ void main() { }); 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 [ - const SizedBox(width: 800.0, height: 0.0), - ], - )); + await tester.pumpWidget( + new Column( + children: [ + new Wrap( + direction: Axis.horizontal, + textDirection: TextDirection.ltr, + spacing: 10.0, + runSpacing: 10.0, + children: const [ + const SizedBox(width: 800.0, height: 10.0), + ], + ), + ], + ) + ); - expect(tester.renderObject(find.byType(Wrap)).size, equals(const Size(800.0, 600.0))); + expect(tester.renderObject(find.byType(Wrap)).size, equals(const Size(800.0, 10.0))); verify(tester, [const Offset(0.0, 0.0)]); + + await tester.pumpWidget( + new Column( + children: [ + new Wrap( + direction: Axis.horizontal, + textDirection: TextDirection.ltr, + spacing: 10.0, + runSpacing: 10.0, + children: const [ + const SizedBox(width: 800.0, height: 10.0), + const SizedBox(width: 800.0, height: 10.0), + ], + ), + ], + ) + ); + + expect(tester.renderObject(find.byType(Wrap)).size, equals(const Size(800.0, 30.0))); + verify(tester, [ + const Offset(0.0, 0.0), + const Offset(0.0, 20.0), + ]); }); }