diff --git a/packages/flutter/lib/src/rendering/wrap.dart b/packages/flutter/lib/src/rendering/wrap.dart
index 1eab803..ff09a70 100644
--- a/packages/flutter/lib/src/rendering/wrap.dart
+++ b/packages/flutter/lib/src/rendering/wrap.dart
@@ -421,7 +421,7 @@
   double computeMaxIntrinsicWidth(double height) {
     switch (direction) {
       case Axis.horizontal:
-        double width = math.max(childCount - 1, 0) * spacing;
+        double width = 0.0;
         RenderBox? child = firstChild;
         while (child != null) {
           width += child.getMaxIntrinsicWidth(double.infinity);
@@ -455,7 +455,7 @@
       case Axis.horizontal:
         return computeDryLayout(BoxConstraints(maxWidth: width)).height;
       case Axis.vertical:
-        double height = math.max(childCount - 1, 0) * spacing;
+        double height = 0.0;
         RenderBox? child = firstChild;
         while (child != null) {
           height += child.getMaxIntrinsicHeight(double.infinity);
diff --git a/packages/flutter/test/rendering/wrap_test.dart b/packages/flutter/test/rendering/wrap_test.dart
index 4deb640..4b0891a 100644
--- a/packages/flutter/test/rendering/wrap_test.dart
+++ b/packages/flutter/test/rendering/wrap_test.dart
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'dart:math' as math;
-
 import 'package:flutter/rendering.dart';
 import 'package:flutter_test/flutter_test.dart';
 
@@ -221,91 +219,4 @@
       expect(context.clipBehavior, equals(clip));
     }
   });
-
-  test('Compute max intrinsic height with spacing', () {
-    const double itemWidth = 64;
-    const double itemHeight = 32;
-
-    final RenderBox child = RenderConstrainedBox(
-      additionalConstraints: const BoxConstraints.tightFor(
-        width: itemWidth,
-        height: itemHeight,
-      ),
-    );
-
-    final RenderWrap renderWrap = RenderWrap();
-    renderWrap.add(child);
-
-    renderWrap.spacing = 5;
-    renderWrap.direction = Axis.vertical;
-
-    expect(renderWrap.computeMaxIntrinsicHeight(double.infinity), itemHeight);
-
-
-    final List<RenderBox> children = <RenderBox>[
-      RenderConstrainedBox(
-        additionalConstraints: const BoxConstraints.tightFor(
-          width: itemWidth,
-          height: itemHeight,
-        ),
-      ),
-      RenderConstrainedBox(
-        additionalConstraints: const BoxConstraints.tightFor(
-          width: itemWidth,
-          height: itemHeight,
-        ),
-      ),
-    ];
-
-    children.forEach(renderWrap.add);
-
-    final double childrenHeight = renderWrap.childCount * itemHeight;
-    final double spacingHeight = math.max(renderWrap.childCount - 1, 0) * renderWrap.spacing;
-
-    expect(renderWrap.computeMaxIntrinsicHeight(double.infinity), childrenHeight + spacingHeight);
-  });
-
-  test('Compute max intrinsic width with spacing', () {
-    const double itemWidth = 64;
-    const double itemHeight = 32;
-
-    final RenderBox child = RenderConstrainedBox(
-      additionalConstraints: const BoxConstraints.tightFor(
-        width: itemWidth,
-        height: itemHeight,
-      ),
-    );
-
-    final RenderWrap renderWrap = RenderWrap();
-    renderWrap.add(child);
-
-    renderWrap.spacing = 5;
-    renderWrap.direction = Axis.horizontal;
-
-    expect(renderWrap.computeMaxIntrinsicWidth(double.infinity), itemWidth);
-
-
-    final List<RenderBox> children = <RenderBox>[
-      RenderConstrainedBox(
-        additionalConstraints: const BoxConstraints.tightFor(
-          width: itemWidth,
-          height: itemHeight,
-        ),
-      ),
-      RenderConstrainedBox(
-        additionalConstraints: const BoxConstraints.tightFor(
-          width: itemWidth,
-          height: itemHeight,
-        ),
-      ),
-    ];
-
-    children.forEach(renderWrap.add);
-
-    final double childrenWidth = renderWrap.childCount * itemWidth;
-    final double spacingWidth = math.max(renderWrap.childCount - 1, 0) * renderWrap.spacing;
-
-    expect(renderWrap.computeMaxIntrinsicWidth(double.infinity), childrenWidth + spacingWidth);
-  });
-
 }
