Revert "Add clipBehavior to widgets with clipRect (#55977)" (#58344)

This reverts commit cd593dae1961ca2bc5c045a310f16e6cdffc8294.
diff --git a/bin/internal/shared.sh b/bin/internal/shared.sh
old mode 100644
new mode 100755
diff --git a/dev/integration_tests/flutter_gallery/lib/demo/pesto_demo.dart b/dev/integration_tests/flutter_gallery/lib/demo/pesto_demo.dart
index bac6263..328dce7 100644
--- a/dev/integration_tests/flutter_gallery/lib/demo/pesto_demo.dart
+++ b/dev/integration_tests/flutter_gallery/lib/demo/pesto_demo.dart
@@ -224,7 +224,7 @@
         child: SizedBox(
           width: kLogoWidth,
           child: Stack(
-            clipBehavior: Clip.none,
+            overflow: Overflow.visible,
             children: <Widget>[
               Positioned.fromRect(
                 rect: _imageRectTween.lerp(widget.t),
diff --git a/packages/flutter/lib/src/rendering/editable.dart b/packages/flutter/lib/src/rendering/editable.dart
index 4d5f46b..0f31f6a 100644
--- a/packages/flutter/lib/src/rendering/editable.dart
+++ b/packages/flutter/lib/src/rendering/editable.dart
@@ -227,7 +227,6 @@
     EdgeInsets floatingCursorAddedMargin = const EdgeInsets.fromLTRB(4, 4, 4, 5),
     TextRange promptRectRange,
     Color promptRectColor,
-    Clip clipBehavior = Clip.hardEdge,
     @required this.textSelectionDelegate,
   }) : assert(textAlign != null),
        assert(textDirection != null, 'RenderEditable created without a textDirection.'),
@@ -258,7 +257,6 @@
        assert(devicePixelRatio != null),
        assert(selectionHeightStyle != null),
        assert(selectionWidthStyle != null),
-       assert(clipBehavior != null),
        _textPainter = TextPainter(
          text: text,
          textAlign: textAlign,
@@ -292,8 +290,7 @@
        _obscureText = obscureText,
        _readOnly = readOnly,
        _forceLine = forceLine,
-       _promptRectRange = promptRectRange,
-       _clipBehavior = clipBehavior {
+       _promptRectRange = promptRectRange {
     assert(_showCursor != null);
     assert(!_showCursor.value || cursorColor != null);
     this.hasFocus = hasFocus ?? false;
@@ -1244,20 +1241,6 @@
 
   double get _caretMargin => _kCaretGap + cursorWidth;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge], and must not be null.
-  Clip get clipBehavior => _clipBehavior;
-  Clip _clipBehavior = Clip.hardEdge;
-  set clipBehavior(Clip value) {
-    assert(value != null);
-    if (value != _clipBehavior) {
-      _clipBehavior = value;
-      markNeedsPaint();
-      markNeedsSemanticsUpdate();
-    }
-  }
-
   @override
   void describeSemanticsConfiguration(SemanticsConfiguration config) {
     super.describeSemanticsConfiguration(config);
@@ -2150,8 +2133,8 @@
   @override
   void paint(PaintingContext context, Offset offset) {
     _layoutText(minWidth: constraints.minWidth, maxWidth: constraints.maxWidth);
-    if (_hasVisualOverflow && clipBehavior != Clip.none)
-      context.pushClipRect(needsCompositing, offset, Offset.zero & size, _paintContents, clipBehavior: clipBehavior);
+    if (_hasVisualOverflow)
+      context.pushClipRect(needsCompositing, offset, Offset.zero & size, _paintContents);
     else
       _paintContents(context, offset);
     _paintHandleLayers(context, getEndpointsForSelection(selection));
diff --git a/packages/flutter/lib/src/rendering/flex.dart b/packages/flutter/lib/src/rendering/flex.dart
index 91819f3..45cdc72 100644
--- a/packages/flutter/lib/src/rendering/flex.dart
+++ b/packages/flutter/lib/src/rendering/flex.dart
@@ -277,20 +277,17 @@
     TextDirection textDirection,
     VerticalDirection verticalDirection = VerticalDirection.down,
     TextBaseline textBaseline,
-    Clip clipBehavior = Clip.none,
   }) : assert(direction != null),
        assert(mainAxisAlignment != null),
        assert(mainAxisSize != null),
        assert(crossAxisAlignment != null),
-       assert(clipBehavior != null),
        _direction = direction,
        _mainAxisAlignment = mainAxisAlignment,
        _mainAxisSize = mainAxisSize,
        _crossAxisAlignment = crossAxisAlignment,
        _textDirection = textDirection,
        _verticalDirection = verticalDirection,
-       _textBaseline = textBaseline,
-       _clipBehavior = clipBehavior {
+       _textBaseline = textBaseline {
     addAll(children);
   }
 
@@ -477,20 +474,6 @@
   // are treated as not overflowing.
   bool get _hasOverflow => _overflow > precisionErrorTolerance;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.none], and must not be null.
-  Clip get clipBehavior => _clipBehavior;
-  Clip _clipBehavior = Clip.none;
-  set clipBehavior(Clip value) {
-    assert(value != null);
-    if (value != _clipBehavior) {
-      _clipBehavior = value;
-      markNeedsPaint();
-      markNeedsSemanticsUpdate();
-    }
-  }
-
   @override
   void setupParentData(RenderBox child) {
     if (child.parentData is! FlexParentData)
@@ -972,12 +955,8 @@
     if (size.isEmpty)
       return;
 
-    if (clipBehavior == Clip.none) {
-      defaultPaint(context, offset);
-    } else {
-      // We have overflow and the clipBehavior isn't none. Clip it.
-      context.pushClipRect(needsCompositing, offset, Offset.zero & size, defaultPaint, clipBehavior: clipBehavior);
-    }
+    // We have overflow. Clip it.
+    context.pushClipRect(needsCompositing, offset, Offset.zero & size, defaultPaint);
 
     assert(() {
       // Only set this if it's null to save work. It gets reset to null if the
diff --git a/packages/flutter/lib/src/rendering/list_wheel_viewport.dart b/packages/flutter/lib/src/rendering/list_wheel_viewport.dart
index 92baf8d..7ae0aab 100644
--- a/packages/flutter/lib/src/rendering/list_wheel_viewport.dart
+++ b/packages/flutter/lib/src/rendering/list_wheel_viewport.dart
@@ -143,8 +143,8 @@
     double overAndUnderCenterOpacity = 1,
     @required double itemExtent,
     double squeeze = 1,
+    bool clipToSize = true,
     bool renderChildrenOutsideViewport = false,
-    Clip clipBehavior = Clip.none,
     List<RenderBox> children,
   }) : assert(childManager != null),
        assert(offset != null),
@@ -163,11 +163,11 @@
        assert(squeeze != null),
        assert(squeeze > 0),
        assert(itemExtent > 0),
+       assert(clipToSize != null),
        assert(renderChildrenOutsideViewport != null),
-       assert(clipBehavior != null),
        assert(
-         !renderChildrenOutsideViewport || clipBehavior == Clip.none,
-         clipBehaviorAndRenderChildrenOutsideViewportConflict,
+         !renderChildrenOutsideViewport || !clipToSize,
+         clipToSizeAndRenderChildrenOutsideViewportConflict,
        ),
        _offset = offset,
        _diameterRatio = diameterRatio,
@@ -178,8 +178,8 @@
        _overAndUnderCenterOpacity = overAndUnderCenterOpacity,
        _itemExtent = itemExtent,
        _squeeze = squeeze,
-       _renderChildrenOutsideViewport = renderChildrenOutsideViewport,
-       _clipBehavior = clipBehavior {
+       _clipToSize = clipToSize,
+       _renderChildrenOutsideViewport = renderChildrenOutsideViewport {
     addAll(children);
   }
 
@@ -199,10 +199,10 @@
       'be clipped in the z-axis and therefore not renderable. Value must be '
       'between 0 and 0.01.';
 
-  /// An error message to show when [clipBehavior] and [renderChildrenOutsideViewport]
+  /// An error message to show when [clipToSize] and [renderChildrenOutsideViewport]
   /// are set to conflicting values.
-  static const String clipBehaviorAndRenderChildrenOutsideViewportConflict =
-      'Cannot renderChildrenOutsideViewport and clip since children '
+  static const String clipToSizeAndRenderChildrenOutsideViewportConflict =
+      'Cannot renderChildrenOutsideViewport and clipToSize since children '
       'rendered outside will be clipped anyway.';
 
   /// The delegate that manages the children of this object.
@@ -441,14 +441,37 @@
     markNeedsSemanticsUpdate();
   }
 
+  /// {@template flutter.rendering.wheelList.clipToSize}
+  /// Whether to clip painted children to the inside of this viewport.
+  ///
+  /// Defaults to [true]. Must not be null.
+  ///
+  /// If this is false and [renderChildrenOutsideViewport] is false, the
+  /// first and last children may be painted partly outside of this scroll view.
+  /// {@endtemplate}
+  bool get clipToSize => _clipToSize;
+  bool _clipToSize;
+  set clipToSize(bool value) {
+    assert(value != null);
+    assert(
+      !renderChildrenOutsideViewport || !clipToSize,
+      clipToSizeAndRenderChildrenOutsideViewportConflict,
+    );
+    if (value == _clipToSize)
+      return;
+    _clipToSize = value;
+    markNeedsPaint();
+    markNeedsSemanticsUpdate();
+  }
+
   /// {@template flutter.rendering.wheelList.renderChildrenOutsideViewport}
   /// Whether to paint children inside the viewport only.
   ///
   /// If false, every child will be painted. However the [Scrollable] is still
   /// the size of the viewport and detects gestures inside only.
   ///
-  /// Defaults to [false]. Must not be null. Cannot be true if [clipBehavior]
-  /// is not [Clip.none] since children outside the viewport will be clipped, and
+  /// Defaults to [false]. Must not be null. Cannot be true if [clipToSize]
+  /// is also true since children outside the viewport will be clipped, and
   /// therefore cannot render children outside the viewport.
   /// {@endtemplate}
   bool get renderChildrenOutsideViewport => _renderChildrenOutsideViewport;
@@ -456,8 +479,8 @@
   set renderChildrenOutsideViewport(bool value) {
     assert(value != null);
     assert(
-      !renderChildrenOutsideViewport || clipBehavior == Clip.none,
-      clipBehaviorAndRenderChildrenOutsideViewportConflict,
+      !renderChildrenOutsideViewport || !clipToSize,
+      clipToSizeAndRenderChildrenOutsideViewportConflict,
     );
     if (value == _renderChildrenOutsideViewport)
       return;
@@ -466,20 +489,6 @@
     markNeedsSemanticsUpdate();
   }
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge], and must not be null.
-  Clip get clipBehavior => _clipBehavior;
-  Clip _clipBehavior = Clip.hardEdge;
-  set clipBehavior(Clip value) {
-    assert(value != null);
-    if (value != _clipBehavior) {
-      _clipBehavior = value;
-      markNeedsPaint();
-      markNeedsSemanticsUpdate();
-    }
-  }
-
   void _hasScrolled() {
     markNeedsLayout();
     markNeedsSemanticsUpdate();
@@ -778,13 +787,12 @@
   @override
   void paint(PaintingContext context, Offset offset) {
     if (childCount > 0) {
-      if (_shouldClipAtCurrentOffset() && clipBehavior != Clip.none) {
+      if (_clipToSize && _shouldClipAtCurrentOffset()) {
         context.pushClipRect(
           needsCompositing,
           offset,
           Offset.zero & size,
           _paintVisibleChildren,
-          clipBehavior: clipBehavior,
         );
       } else {
         _paintVisibleChildren(context, offset);
diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart
index 1a756a3..0d85ea2 100644
--- a/packages/flutter/lib/src/rendering/proxy_box.dart
+++ b/packages/flutter/lib/src/rendering/proxy_box.dart
@@ -2292,14 +2292,11 @@
     AlignmentGeometry alignment = Alignment.center,
     TextDirection textDirection,
     RenderBox child,
-    Clip clipBehavior = Clip.none,
   }) : assert(fit != null),
        assert(alignment != null),
-       assert(clipBehavior != null),
        _fit = fit,
        _alignment = alignment,
        _textDirection = textDirection,
-       _clipBehavior = clipBehavior,
        super(child);
 
   Alignment _resolvedAlignment;
@@ -2376,20 +2373,6 @@
   bool _hasVisualOverflow;
   Matrix4 _transform;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.none], and must not be null.
-  Clip get clipBehavior => _clipBehavior;
-  Clip _clipBehavior = Clip.none;
-  set clipBehavior(Clip value) {
-    assert(value != null);
-    if (value != _clipBehavior) {
-      _clipBehavior = value;
-      markNeedsPaint();
-      markNeedsSemanticsUpdate();
-    }
-  }
-
   void _clearPaintData() {
     _hasVisualOverflow = null;
     _transform = null;
@@ -2435,9 +2418,9 @@
       return;
     _updatePaintData();
     if (child != null) {
-      if (_hasVisualOverflow && clipBehavior != Clip.none)
+      if (_hasVisualOverflow)
         layer = context.pushClipRect(needsCompositing, offset, Offset.zero & size, _paintChildWithTransform,
-            oldLayer: layer is ClipRectLayer ? layer as ClipRectLayer : null, clipBehavior: clipBehavior);
+            oldLayer: layer is ClipRectLayer ? layer as ClipRectLayer : null);
       else
         layer = _paintChildWithTransform(context, offset);
     }
diff --git a/packages/flutter/lib/src/rendering/shifted_box.dart b/packages/flutter/lib/src/rendering/shifted_box.dart
index a1a9776..832359c 100644
--- a/packages/flutter/lib/src/rendering/shifted_box.dart
+++ b/packages/flutter/lib/src/rendering/shifted_box.dart
@@ -626,11 +626,8 @@
     @required TextDirection textDirection,
     Axis constrainedAxis,
     RenderBox child,
-    Clip clipBehavior = Clip.none,
   }) : assert(alignment != null),
-       assert(clipBehavior != null),
        _constrainedAxis = constrainedAxis,
-       _clipBehavior = clipBehavior,
        super.mixin(alignment, textDirection, child);
 
   /// The axis to retain constraints on, if any.
@@ -652,20 +649,6 @@
   Rect _overflowChildRect = Rect.zero;
   bool _isOverflowing = false;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.none], and must not be null.
-  Clip get clipBehavior => _clipBehavior;
-  Clip _clipBehavior = Clip.none;
-  set clipBehavior(Clip value) {
-    assert(value != null);
-    if (value != _clipBehavior) {
-      _clipBehavior = value;
-      markNeedsPaint();
-      markNeedsSemanticsUpdate();
-    }
-  }
-
   @override
   void performLayout() {
     final BoxConstraints constraints = this.constraints;
@@ -711,12 +694,8 @@
       return;
     }
 
-    if (clipBehavior == Clip.none) {
-      super.paint(context, offset);
-    } else {
-      // We have overflow and the clipBehavior isn't none. Clip it.
-      context.pushClipRect(needsCompositing, offset, Offset.zero & size, super.paint, clipBehavior: clipBehavior);
-    }
+    // We have overflow. Clip it.
+    context.pushClipRect(needsCompositing, offset, Offset.zero & size, super.paint);
 
     // Display the overflow indicator.
     assert(() {
diff --git a/packages/flutter/lib/src/rendering/stack.dart b/packages/flutter/lib/src/rendering/stack.dart
index 5977d22..5eacb7b 100644
--- a/packages/flutter/lib/src/rendering/stack.dart
+++ b/packages/flutter/lib/src/rendering/stack.dart
@@ -268,8 +268,6 @@
   passthrough,
 }
 
-// TODO(liyuqian): Deprecate and remove `Overflow` once its usages are removed from Google.
-
 /// Whether overflowing children should be clipped, or their overflow be
 /// visible.
 enum Overflow {
@@ -328,14 +326,14 @@
     AlignmentGeometry alignment = AlignmentDirectional.topStart,
     TextDirection textDirection,
     StackFit fit = StackFit.loose,
-    Clip clipBehavior = Clip.hardEdge,
+    Overflow overflow = Overflow.clip,
   }) : assert(alignment != null),
        assert(fit != null),
-       assert(clipBehavior != null),
+       assert(overflow != null),
        _alignment = alignment,
        _textDirection = textDirection,
        _fit = fit,
-       _clipBehavior = clipBehavior {
+       _overflow = overflow {
     addAll(children);
   }
 
@@ -413,17 +411,17 @@
     }
   }
 
-  /// {@macro flutter.widgets.Clip}
+  /// Whether overflowing children should be clipped. See [Overflow].
   ///
-  /// Defaults to [Clip.hardEdge], and must not be null.
-  Clip get clipBehavior => _clipBehavior;
-  Clip _clipBehavior = Clip.hardEdge;
-  set clipBehavior(Clip value) {
+  /// Some children in a stack might overflow its box. When this flag is set to
+  /// [Overflow.clip], children cannot paint outside of the stack's box.
+  Overflow get overflow => _overflow;
+  Overflow _overflow;
+  set overflow(Overflow value) {
     assert(value != null);
-    if (value != _clipBehavior) {
-      _clipBehavior = value;
+    if (_overflow != value) {
+      _overflow = value;
       markNeedsPaint();
-      markNeedsSemanticsUpdate();
     }
   }
 
@@ -606,8 +604,8 @@
 
   @override
   void paint(PaintingContext context, Offset offset) {
-    if (clipBehavior != Clip.none && _hasVisualOverflow) {
-      context.pushClipRect(needsCompositing, offset, Offset.zero & size, paintStack, clipBehavior: clipBehavior);
+    if (_overflow == Overflow.clip && _hasVisualOverflow) {
+      context.pushClipRect(needsCompositing, offset, Offset.zero & size, paintStack);
     } else {
       paintStack(context, offset);
     }
@@ -622,7 +620,7 @@
     properties.add(DiagnosticsProperty<AlignmentGeometry>('alignment', alignment));
     properties.add(EnumProperty<TextDirection>('textDirection', textDirection));
     properties.add(EnumProperty<StackFit>('fit', fit));
-    properties.add(EnumProperty<Clip>('clipBehavior', clipBehavior, defaultValue: Clip.hardEdge));
+    properties.add(EnumProperty<Overflow>('overflow', overflow));
   }
 }
 
diff --git a/packages/flutter/lib/src/rendering/viewport.dart b/packages/flutter/lib/src/rendering/viewport.dart
index 3fcc91a..0424305 100644
--- a/packages/flutter/lib/src/rendering/viewport.dart
+++ b/packages/flutter/lib/src/rendering/viewport.dart
@@ -171,20 +171,17 @@
     @required ViewportOffset offset,
     double cacheExtent,
     CacheExtentStyle cacheExtentStyle = CacheExtentStyle.pixel,
-    Clip clipBehavior = Clip.hardEdge,
   }) : assert(axisDirection != null),
        assert(crossAxisDirection != null),
        assert(offset != null),
        assert(axisDirectionToAxis(axisDirection) != axisDirectionToAxis(crossAxisDirection)),
        assert(cacheExtentStyle != null),
        assert(cacheExtent != null || cacheExtentStyle == CacheExtentStyle.pixel),
-       assert(clipBehavior != null),
        _axisDirection = axisDirection,
        _crossAxisDirection = crossAxisDirection,
        _offset = offset,
        _cacheExtent = cacheExtent ?? RenderAbstractViewport.defaultCacheExtent,
-       _cacheExtentStyle = cacheExtentStyle,
-       _clipBehavior = clipBehavior;
+       _cacheExtentStyle = cacheExtentStyle;
 
   @override
   void describeSemanticsConfiguration(SemanticsConfiguration config) {
@@ -317,20 +314,6 @@
     markNeedsLayout();
   }
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge], and must not be null.
-  Clip get clipBehavior => _clipBehavior;
-  Clip _clipBehavior = Clip.hardEdge;
-  set clipBehavior(Clip value) {
-    assert(value != null);
-    if (value != _clipBehavior) {
-      _clipBehavior = value;
-      markNeedsPaint();
-      markNeedsSemanticsUpdate();
-    }
-  }
-
   @override
   void attach(PipelineOwner owner) {
     super.attach(owner);
@@ -591,8 +574,8 @@
   void paint(PaintingContext context, Offset offset) {
     if (firstChild == null)
       return;
-    if (hasVisualOverflow && clipBehavior != Clip.none) {
-      context.pushClipRect(needsCompositing, offset, Offset.zero & size, _paintContents, clipBehavior: clipBehavior);
+    if (hasVisualOverflow) {
+      context.pushClipRect(needsCompositing, offset, Offset.zero & size, _paintContents);
     } else {
       _paintContents(context, offset);
     }
@@ -1153,11 +1136,9 @@
     RenderSliver center,
     double cacheExtent,
     CacheExtentStyle cacheExtentStyle = CacheExtentStyle.pixel,
-    Clip clipBehavior = Clip.hardEdge,
   }) : assert(anchor != null),
        assert(anchor >= 0.0 && anchor <= 1.0),
        assert(cacheExtentStyle != CacheExtentStyle.viewport || cacheExtent != null),
-       assert(clipBehavior != null),
        _anchor = anchor,
        _center = center,
        super(
@@ -1166,7 +1147,6 @@
          offset: offset,
          cacheExtent: cacheExtent,
          cacheExtentStyle: cacheExtentStyle,
-         clipBehavior: clipBehavior,
        ) {
     addAll(children);
     if (center == null && firstChild != null)
@@ -1678,14 +1658,8 @@
     AxisDirection axisDirection = AxisDirection.down,
     @required AxisDirection crossAxisDirection,
     @required ViewportOffset offset,
-    Clip clipBehavior = Clip.hardEdge,
     List<RenderSliver> children,
-  }) : super(
-        axisDirection: axisDirection,
-        crossAxisDirection: crossAxisDirection,
-        offset: offset,
-        clipBehavior: clipBehavior,
-       ) {
+  }) : super(axisDirection: axisDirection, crossAxisDirection: crossAxisDirection, offset: offset) {
     addAll(children);
   }
 
diff --git a/packages/flutter/lib/src/rendering/wrap.dart b/packages/flutter/lib/src/rendering/wrap.dart
index 40359b5..c1bb0d7 100644
--- a/packages/flutter/lib/src/rendering/wrap.dart
+++ b/packages/flutter/lib/src/rendering/wrap.dart
@@ -101,9 +101,8 @@
 ///
 /// The runs themselves are then positioned in the cross axis according to the
 /// [runSpacing] and [runAlignment].
-class RenderWrap extends RenderBox
-    with ContainerRenderObjectMixin<RenderBox, WrapParentData>,
-         RenderBoxContainerDefaultsMixin<RenderBox, WrapParentData> {
+class RenderWrap extends RenderBox with ContainerRenderObjectMixin<RenderBox, WrapParentData>,
+                                        RenderBoxContainerDefaultsMixin<RenderBox, WrapParentData> {
   /// Creates a wrap render object.
   ///
   /// By default, the wrap layout is horizontal and both the children and the
@@ -118,14 +117,12 @@
     WrapCrossAlignment crossAxisAlignment = WrapCrossAlignment.start,
     TextDirection textDirection,
     VerticalDirection verticalDirection = VerticalDirection.down,
-    Clip clipBehavior = Clip.none,
   }) : assert(direction != null),
        assert(alignment != null),
        assert(spacing != null),
        assert(runAlignment != null),
        assert(runSpacing != null),
        assert(crossAxisAlignment != null),
-       assert(clipBehavior != null),
        _direction = direction,
        _alignment = alignment,
        _spacing = spacing,
@@ -133,8 +130,7 @@
        _runSpacing = runSpacing,
        _crossAxisAlignment = crossAxisAlignment,
        _textDirection = textDirection,
-       _verticalDirection = verticalDirection,
-       _clipBehavior = clipBehavior {
+       _verticalDirection = verticalDirection {
     addAll(children);
   }
 
@@ -330,20 +326,6 @@
     }
   }
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.none], and must not be null.
-  Clip get clipBehavior => _clipBehavior;
-  Clip _clipBehavior = Clip.none;
-  set clipBehavior(Clip value) {
-    assert(value != null);
-    if (value != _clipBehavior) {
-      _clipBehavior = value;
-      markNeedsPaint();
-      markNeedsSemanticsUpdate();
-    }
-  }
-
   bool get _debugHasNecessaryDirections {
     assert(direction != null);
     assert(alignment != null);
@@ -767,8 +749,8 @@
   void paint(PaintingContext context, Offset offset) {
     // TODO(ianh): move the debug flex overflow paint logic somewhere common so
     // it can be reused here
-    if (_hasVisualOverflow && clipBehavior != Clip.none)
-      context.pushClipRect(needsCompositing, offset, Offset.zero & size, defaultPaint, clipBehavior: clipBehavior);
+    if (_hasVisualOverflow)
+      context.pushClipRect(needsCompositing, offset, Offset.zero & size, defaultPaint);
     else
       defaultPaint(context, offset);
   }
diff --git a/packages/flutter/lib/src/widgets/animated_cross_fade.dart b/packages/flutter/lib/src/widgets/animated_cross_fade.dart
index e1c563d..f23dd52 100644
--- a/packages/flutter/lib/src/widgets/animated_cross_fade.dart
+++ b/packages/flutter/lib/src/widgets/animated_cross_fade.dart
@@ -216,7 +216,7 @@
   /// [AnimatedCrossFadeBuilder].
   static Widget defaultLayoutBuilder(Widget topChild, Key topChildKey, Widget bottomChild, Key bottomChildKey) {
     return Stack(
-      clipBehavior: Clip.none,
+      overflow: Overflow.visible,
       children: <Widget>[
         Positioned(
           key: bottomChildKey,
diff --git a/packages/flutter/lib/src/widgets/basic.dart b/packages/flutter/lib/src/widgets/basic.dart
index 5c7e915..de3530b 100644
--- a/packages/flutter/lib/src/widgets/basic.dart
+++ b/packages/flutter/lib/src/widgets/basic.dart
@@ -42,6 +42,7 @@
   MainAxisAlignment,
   MainAxisSize,
   MultiChildLayoutDelegate,
+  Overflow,
   PaintingContext,
   PointerCancelEvent,
   PointerCancelEventListener,
@@ -1410,11 +1411,9 @@
     Key key,
     this.fit = BoxFit.contain,
     this.alignment = Alignment.center,
-    this.clipBehavior = Clip.hardEdge,
     Widget child,
   }) : assert(fit != null),
        assert(alignment != null),
-       assert(clipBehavior != null),
        super(key: key, child: child);
 
   /// How to inscribe the child into the space allocated during layout.
@@ -1436,19 +1435,12 @@
   ///    relative to text direction.
   final AlignmentGeometry alignment;
 
-  // TODO(liyuqian): defaults to [Clip.none] once Google references are updated.
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge].
-  final Clip clipBehavior;
-
   @override
   RenderFittedBox createRenderObject(BuildContext context) {
     return RenderFittedBox(
       fit: fit,
       alignment: alignment,
       textDirection: Directionality.of(context),
-      clipBehavior: clipBehavior,
     );
   }
 
@@ -1457,8 +1449,7 @@
     renderObject
       ..fit = fit
       ..alignment = alignment
-      ..textDirection = Directionality.of(context)
-      ..clipBehavior = clipBehavior;
+      ..textDirection = Directionality.of(context);
   }
 
   @override
@@ -2240,9 +2231,7 @@
     this.textDirection,
     this.alignment = Alignment.center,
     this.constrainedAxis,
-    this.clipBehavior = Clip.hardEdge,
   }) : assert(alignment != null),
-       assert(clipBehavior != null),
        super(key: key, child: child);
 
   /// The text direction to use when interpreting the [alignment] if it is an
@@ -2268,19 +2257,12 @@
   /// will be retained.
   final Axis constrainedAxis;
 
-  // TODO(liyuqian): defaults to [Clip.none] once Google references are updated.
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge].
-  final Clip clipBehavior;
-
   @override
   void updateRenderObject(BuildContext context, covariant RenderUnconstrainedBox renderObject) {
     renderObject
       ..textDirection = textDirection ?? Directionality.of(context)
       ..alignment = alignment
-      ..constrainedAxis = constrainedAxis
-      ..clipBehavior = clipBehavior;
+      ..constrainedAxis = constrainedAxis;
   }
 
   @override
@@ -2288,7 +2270,6 @@
     textDirection: textDirection ?? Directionality.of(context),
     alignment: alignment,
     constrainedAxis: constrainedAxis,
-    clipBehavior: clipBehavior,
   );
 
   @override
@@ -3233,10 +3214,8 @@
     this.textDirection,
     this.fit = StackFit.loose,
     this.overflow = Overflow.clip,
-    this.clipBehavior = Clip.hardEdge,
     List<Widget> children = const <Widget>[],
-  }) : assert(clipBehavior != null),
-       super(key: key, children: children);
+  }) : super(key: key, children: children);
 
   /// How to align the non-positioned and partially-positioned children in the
   /// stack.
@@ -3273,29 +3252,19 @@
   /// ([StackFit.expand]).
   final StackFit fit;
 
-  // TODO(liyuqian): Deprecate and remove [overflow] once its usages are removed from Google.
-
   /// Whether overflowing children should be clipped. See [Overflow].
   ///
   /// Some children in a stack might overflow its box. When this flag is set to
   /// [Overflow.clip], children cannot paint outside of the stack's box.
-  ///
-  /// This overrides [clipBehavior] for now due to a staged roll out without
-  /// breaking Google. We will remove it and only use [clipBehavior] soon.
   final Overflow overflow;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge].
-  final Clip clipBehavior;
-
   @override
   RenderStack createRenderObject(BuildContext context) {
     return RenderStack(
       alignment: alignment,
       textDirection: textDirection ?? Directionality.of(context),
       fit: fit,
-      clipBehavior: overflow == Overflow.clip ? Clip.hardEdge : clipBehavior,
+      overflow: overflow,
     );
   }
 
@@ -3305,7 +3274,7 @@
       ..alignment = alignment
       ..textDirection = textDirection ?? Directionality.of(context)
       ..fit = fit
-      ..clipBehavior = overflow == Overflow.clip ? Clip.hardEdge : clipBehavior;
+      ..overflow = overflow;
   }
 
   @override
@@ -3314,7 +3283,7 @@
     properties.add(DiagnosticsProperty<AlignmentGeometry>('alignment', alignment));
     properties.add(EnumProperty<TextDirection>('textDirection', textDirection, defaultValue: null));
     properties.add(EnumProperty<StackFit>('fit', fit));
-    properties.add(EnumProperty<Clip>('clipBehavior', clipBehavior, defaultValue: Clip.hardEdge));
+    properties.add(EnumProperty<Overflow>('overflow', overflow));
   }
 }
 
@@ -3840,7 +3809,6 @@
     this.textDirection,
     this.verticalDirection = VerticalDirection.down,
     this.textBaseline,
-    this.clipBehavior = Clip.hardEdge,
     List<Widget> children = const <Widget>[],
   }) : assert(direction != null),
        assert(mainAxisAlignment != null),
@@ -3848,7 +3816,6 @@
        assert(crossAxisAlignment != null),
        assert(verticalDirection != null),
        assert(crossAxisAlignment != CrossAxisAlignment.baseline || textBaseline != null),
-       assert(clipBehavior != null),
        super(key: key, children: children);
 
   /// The direction to use as the main axis.
@@ -3933,12 +3900,6 @@
   /// If aligning items according to their baseline, which baseline to use.
   final TextBaseline textBaseline;
 
-  // TODO(liyuqian): defaults to [Clip.none] once Google references are updated.
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge].
-  final Clip clipBehavior;
-
   bool get _needTextDirection {
     assert(direction != null);
     switch (direction) {
@@ -3982,7 +3943,6 @@
       textDirection: getEffectiveTextDirection(context),
       verticalDirection: verticalDirection,
       textBaseline: textBaseline,
-      clipBehavior: clipBehavior,
     );
   }
 
@@ -3995,8 +3955,7 @@
       ..crossAxisAlignment = crossAxisAlignment
       ..textDirection = getEffectiveTextDirection(context)
       ..verticalDirection = verticalDirection
-      ..textBaseline = textBaseline
-      ..clipBehavior = clipBehavior;
+      ..textBaseline = textBaseline;
   }
 
   @override
@@ -4667,9 +4626,8 @@
     this.crossAxisAlignment = WrapCrossAlignment.start,
     this.textDirection,
     this.verticalDirection = VerticalDirection.down,
-    this.clipBehavior = Clip.hardEdge,
     List<Widget> children = const <Widget>[],
-  }) : assert(clipBehavior != null), super(key: key, children: children);
+  }) : super(key: key, children: children);
 
   /// The direction to use as the main axis.
   ///
@@ -4803,12 +4761,6 @@
   /// [verticalDirection] must not be null.
   final VerticalDirection verticalDirection;
 
-  // TODO(liyuqian): defaults to [Clip.none] once Google references are updated.
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge].
-  final Clip clipBehavior;
-
   @override
   RenderWrap createRenderObject(BuildContext context) {
     return RenderWrap(
@@ -4820,7 +4772,6 @@
       crossAxisAlignment: crossAxisAlignment,
       textDirection: textDirection ?? Directionality.of(context),
       verticalDirection: verticalDirection,
-      clipBehavior: clipBehavior,
     );
   }
 
@@ -4834,8 +4785,7 @@
       ..runSpacing = runSpacing
       ..crossAxisAlignment = crossAxisAlignment
       ..textDirection = textDirection ?? Directionality.of(context)
-      ..verticalDirection = verticalDirection
-      ..clipBehavior = clipBehavior;
+      ..verticalDirection = verticalDirection;
   }
 
   @override
diff --git a/packages/flutter/lib/src/widgets/editable_text.dart b/packages/flutter/lib/src/widgets/editable_text.dart
index eae0a2c..ff29484 100644
--- a/packages/flutter/lib/src/widgets/editable_text.dart
+++ b/packages/flutter/lib/src/widgets/editable_text.dart
@@ -413,7 +413,6 @@
       selectAll: true,
     ),
     this.autofillHints,
-    this.clipBehavior = Clip.hardEdge,
   }) : assert(controller != null),
        assert(focusNode != null),
        assert(obscuringCharacter != null && obscuringCharacter.length == 1),
@@ -451,7 +450,6 @@
        assert(scrollPadding != null),
        assert(dragStartBehavior != null),
        assert(toolbarOptions != null),
-       assert(clipBehavior != null),
        _strutStyle = strutStyle,
        keyboardType = keyboardType ?? (maxLines == 1 ? TextInputType.text : TextInputType.multiline),
        inputFormatters = maxLines == 1
@@ -1122,11 +1120,6 @@
   /// {@endtemplate}
   final Iterable<String> autofillHints;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge].
-  final Clip clipBehavior;
-
   @override
   EditableTextState createState() => EditableTextState();
 
@@ -2096,7 +2089,6 @@
                 devicePixelRatio: _devicePixelRatio,
                 promptRectRange: _currentPromptRectRange,
                 promptRectColor: widget.autocorrectionTextRectColor,
-                clipBehavior: widget.clipBehavior,
               ),
             ),
           );
@@ -2171,7 +2163,6 @@
     this.devicePixelRatio,
     this.promptRectRange,
     this.promptRectColor,
-    this.clipBehavior,
   }) : assert(textDirection != null),
        assert(rendererIgnoresPointer != null),
        super(key: key);
@@ -2217,7 +2208,6 @@
   final double devicePixelRatio;
   final TextRange promptRectRange;
   final Color promptRectColor;
-  final Clip clipBehavior;
 
   @override
   RenderEditable createRenderObject(BuildContext context) {
@@ -2259,7 +2249,6 @@
       devicePixelRatio: devicePixelRatio,
       promptRectRange: promptRectRange,
       promptRectColor: promptRectColor,
-      clipBehavior: clipBehavior,
     );
   }
 
@@ -2300,7 +2289,6 @@
       ..devicePixelRatio = devicePixelRatio
       ..paintCursorAboveText = paintCursorAboveText
       ..promptRectColor = promptRectColor
-      ..clipBehavior = clipBehavior
       ..setPromptRectRange(promptRectRange);
   }
 }
diff --git a/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart b/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart
index 49952a8..40fdc2b 100644
--- a/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart
+++ b/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart
@@ -579,8 +579,8 @@
     @required this.itemExtent,
     this.squeeze = 1.0,
     this.onSelectedItemChanged,
+    this.clipToSize = true,
     this.renderChildrenOutsideViewport = false,
-    this.clipBehavior = Clip.hardEdge,
     @required List<Widget> children,
   }) : assert(children != null),
        assert(diameterRatio != null),
@@ -595,11 +595,11 @@
        assert(itemExtent > 0),
        assert(squeeze != null),
        assert(squeeze > 0),
+       assert(clipToSize != null),
        assert(renderChildrenOutsideViewport != null),
-       assert(clipBehavior != null),
        assert(
-         !renderChildrenOutsideViewport || clipBehavior == Clip.none,
-         RenderListWheelViewport.clipBehaviorAndRenderChildrenOutsideViewportConflict,
+         !renderChildrenOutsideViewport || !clipToSize,
+         RenderListWheelViewport.clipToSizeAndRenderChildrenOutsideViewportConflict,
        ),
        childDelegate = ListWheelChildListDelegate(children: children),
        super(key: key);
@@ -619,8 +619,8 @@
     @required this.itemExtent,
     this.squeeze = 1.0,
     this.onSelectedItemChanged,
+    this.clipToSize = true,
     this.renderChildrenOutsideViewport = false,
-    this.clipBehavior = Clip.hardEdge,
     @required this.childDelegate,
   }) : assert(childDelegate != null),
        assert(diameterRatio != null),
@@ -635,11 +635,11 @@
        assert(itemExtent > 0),
        assert(squeeze != null),
        assert(squeeze > 0),
+       assert(clipToSize != null),
        assert(renderChildrenOutsideViewport != null),
-       assert(clipBehavior != null),
        assert(
-         !renderChildrenOutsideViewport || clipBehavior == Clip.none,
-         RenderListWheelViewport.clipBehaviorAndRenderChildrenOutsideViewportConflict,
+         !renderChildrenOutsideViewport || !clipToSize,
+         RenderListWheelViewport.clipToSizeAndRenderChildrenOutsideViewportConflict,
        ),
        super(key: key);
 
@@ -698,17 +698,15 @@
   /// On optional listener that's called when the centered item changes.
   final ValueChanged<int> onSelectedItemChanged;
 
+  /// {@macro flutter.rendering.wheelList.clipToSize}
+  final bool clipToSize;
+
   /// {@macro flutter.rendering.wheelList.renderChildrenOutsideViewport}
   final bool renderChildrenOutsideViewport;
 
   /// A delegate that helps lazily instantiating child.
   final ListWheelChildDelegate childDelegate;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge].
-  final Clip clipBehavior;
-
   @override
   _ListWheelScrollViewState createState() => _ListWheelScrollViewState();
 }
@@ -771,10 +769,10 @@
             overAndUnderCenterOpacity: widget.overAndUnderCenterOpacity,
             itemExtent: widget.itemExtent,
             squeeze: widget.squeeze,
+            clipToSize: widget.clipToSize,
             renderChildrenOutsideViewport: widget.renderChildrenOutsideViewport,
             offset: offset,
             childDelegate: widget.childDelegate,
-            clipBehavior: widget.clipBehavior,
           );
         },
       ),
@@ -952,7 +950,7 @@
   ///
   /// The [itemExtent] argument in pixels must be provided and must be positive.
   ///
-  /// The [clipBehavior] argument defaults to [Clip.hardEdge] and must not be null.
+  /// The [clipToSize] argument defaults to true and must not be null.
   ///
   /// The [renderChildrenOutsideViewport] argument defaults to false and must
   /// not be null.
@@ -968,10 +966,10 @@
     this.overAndUnderCenterOpacity = 1.0,
     @required this.itemExtent,
     this.squeeze = 1.0,
+    this.clipToSize = true,
     this.renderChildrenOutsideViewport = false,
     @required this.offset,
     @required this.childDelegate,
-    this.clipBehavior = Clip.hardEdge,
   }) : assert(childDelegate != null),
        assert(offset != null),
        assert(diameterRatio != null),
@@ -985,11 +983,11 @@
        assert(itemExtent > 0),
        assert(squeeze != null),
        assert(squeeze > 0),
+       assert(clipToSize != null),
        assert(renderChildrenOutsideViewport != null),
-       assert(clipBehavior != null),
        assert(
-         !renderChildrenOutsideViewport || clipBehavior == Clip.none,
-         RenderListWheelViewport.clipBehaviorAndRenderChildrenOutsideViewportConflict,
+         !renderChildrenOutsideViewport || !clipToSize,
+         RenderListWheelViewport.clipToSizeAndRenderChildrenOutsideViewportConflict,
        ),
        super(key: key);
 
@@ -1019,6 +1017,9 @@
   /// Defaults to 1.
   final double squeeze;
 
+  /// {@macro flutter.rendering.wheelList.clipToSize}
+  final bool clipToSize;
+
   /// {@macro flutter.rendering.wheelList.renderChildrenOutsideViewport}
   final bool renderChildrenOutsideViewport;
 
@@ -1029,11 +1030,6 @@
   /// A delegate that lazily instantiates children.
   final ListWheelChildDelegate childDelegate;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.none].
-  final Clip clipBehavior;
-
   @override
   ListWheelElement createElement() => ListWheelElement(this);
 
@@ -1051,8 +1047,8 @@
       overAndUnderCenterOpacity: overAndUnderCenterOpacity,
       itemExtent: itemExtent,
       squeeze: squeeze,
+      clipToSize: clipToSize,
       renderChildrenOutsideViewport: renderChildrenOutsideViewport,
-      clipBehavior: clipBehavior,
     );
   }
 
@@ -1068,7 +1064,7 @@
       ..overAndUnderCenterOpacity = overAndUnderCenterOpacity
       ..itemExtent = itemExtent
       ..squeeze = squeeze
-      ..renderChildrenOutsideViewport = renderChildrenOutsideViewport
-      ..clipBehavior = clipBehavior;
+      ..clipToSize = clipToSize
+      ..renderChildrenOutsideViewport = renderChildrenOutsideViewport;
   }
 }
diff --git a/packages/flutter/lib/src/widgets/nested_scroll_view.dart b/packages/flutter/lib/src/widgets/nested_scroll_view.dart
index 14f3e76..d552373 100644
--- a/packages/flutter/lib/src/widgets/nested_scroll_view.dart
+++ b/packages/flutter/lib/src/widgets/nested_scroll_view.dart
@@ -193,12 +193,10 @@
     @required this.headerSliverBuilder,
     @required this.body,
     this.dragStartBehavior = DragStartBehavior.start,
-    this.clipBehavior = Clip.hardEdge,
   }) : assert(scrollDirection != null),
        assert(reverse != null),
        assert(headerSliverBuilder != null),
        assert(body != null),
-       assert(clipBehavior != null),
        super(key: key);
 
   /// An object that can be used to control the position to which the outer
@@ -262,11 +260,6 @@
   /// {@macro flutter.widgets.scrollable.dragStartBehavior}
   final DragStartBehavior dragStartBehavior;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge].
-  final Clip clipBehavior;
-
   /// Returns the [SliverOverlapAbsorberHandle] of the nearest ancestor
   /// [NestedScrollView].
   ///
@@ -444,7 +437,6 @@
               _lastHasScrolledBody,
             ),
             handle: _absorberHandle,
-            clipBehavior: widget.clipBehavior,
           );
         },
       ),
@@ -460,7 +452,6 @@
     @required ScrollController controller,
     @required List<Widget> slivers,
     @required this.handle,
-    @required this.clipBehavior,
     DragStartBehavior dragStartBehavior = DragStartBehavior.start,
   }) : super(
          scrollDirection: scrollDirection,
@@ -472,7 +463,6 @@
        );
 
   final SliverOverlapAbsorberHandle handle;
-  final Clip clipBehavior;
 
   @override
   Widget buildViewport(
@@ -487,7 +477,6 @@
       offset: offset,
       slivers: slivers,
       handle: handle,
-      clipBehavior: clipBehavior,
     );
   }
 }
@@ -1835,7 +1824,6 @@
     Key center,
     List<Widget> slivers = const <Widget>[],
     @required this.handle,
-    Clip clipBehavior = Clip.hardEdge,
   }) : assert(handle != null),
        super(
          key: key,
@@ -1845,7 +1833,6 @@
          offset: offset,
          center: center,
          slivers: slivers,
-         clipBehavior: clipBehavior,
        );
 
   /// The handle to the [SliverOverlapAbsorber] that is feeding this injector.
@@ -1862,7 +1849,6 @@
       anchor: anchor,
       offset: offset,
       handle: handle,
-      clipBehavior: clipBehavior,
     );
   }
 
@@ -1876,8 +1862,7 @@
       )
       ..anchor = anchor
       ..offset = offset
-      ..handle = handle
-      ..clipBehavior = clipBehavior;
+      ..handle = handle;
   }
 
   @override
@@ -1904,7 +1889,6 @@
     List<RenderSliver> children,
     RenderSliver center,
     @required SliverOverlapAbsorberHandle handle,
-    Clip clipBehavior = Clip.hardEdge,
   }) : assert(handle != null),
        _handle = handle,
        super(
@@ -1914,7 +1898,6 @@
          anchor: anchor,
          children: children,
          center: center,
-         clipBehavior: clipBehavior,
        );
 
   /// The object to notify when [markNeedsLayout] is called.
diff --git a/packages/flutter/lib/src/widgets/single_child_scroll_view.dart b/packages/flutter/lib/src/widgets/single_child_scroll_view.dart
index 0d5b98a..f4deca6 100644
--- a/packages/flutter/lib/src/widgets/single_child_scroll_view.dart
+++ b/packages/flutter/lib/src/widgets/single_child_scroll_view.dart
@@ -219,10 +219,8 @@
     this.controller,
     this.child,
     this.dragStartBehavior = DragStartBehavior.start,
-    this.clipBehavior = Clip.hardEdge,
   }) : assert(scrollDirection != null),
        assert(dragStartBehavior != null),
-       assert(clipBehavior != null),
        assert(!(controller != null && primary == true),
           'Primary ScrollViews obtain their ScrollController via inheritance from a PrimaryScrollController widget. '
           'You cannot both set primary to true and pass an explicit controller.'
@@ -292,11 +290,6 @@
   /// {@macro flutter.widgets.scrollable.dragStartBehavior}
   final DragStartBehavior dragStartBehavior;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge].
-  final Clip clipBehavior;
-
   AxisDirection _getDirection(BuildContext context) {
     return getAxisDirectionFromAxisReverseAndDirectionality(context, scrollDirection, reverse);
   }
@@ -320,7 +313,6 @@
           axisDirection: axisDirection,
           offset: offset,
           child: contents,
-          clipBehavior: clipBehavior,
         );
       },
     );
@@ -336,21 +328,17 @@
     this.axisDirection = AxisDirection.down,
     this.offset,
     Widget child,
-    @required this.clipBehavior,
   }) : assert(axisDirection != null),
-       assert(clipBehavior != null),
        super(key: key, child: child);
 
   final AxisDirection axisDirection;
   final ViewportOffset offset;
-  final Clip clipBehavior;
 
   @override
   _RenderSingleChildViewport createRenderObject(BuildContext context) {
     return _RenderSingleChildViewport(
       axisDirection: axisDirection,
       offset: offset,
-      clipBehavior: clipBehavior,
     );
   }
 
@@ -359,8 +347,7 @@
     // Order dependency: The offset setter reads the axis direction.
     renderObject
       ..axisDirection = axisDirection
-      ..offset = offset
-      ..clipBehavior = clipBehavior;
+      ..offset = offset;
   }
 }
 
@@ -370,15 +357,12 @@
     @required ViewportOffset offset,
     double cacheExtent = RenderAbstractViewport.defaultCacheExtent,
     RenderBox child,
-    @required Clip clipBehavior,
   }) : assert(axisDirection != null),
        assert(offset != null),
        assert(cacheExtent != null),
-       assert(clipBehavior != null),
        _axisDirection = axisDirection,
        _offset = offset,
-       _cacheExtent = cacheExtent,
-       _clipBehavior = clipBehavior {
+       _cacheExtent = cacheExtent {
     this.child = child;
   }
 
@@ -419,20 +403,6 @@
     markNeedsLayout();
   }
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.none], and must not be null.
-  Clip get clipBehavior => _clipBehavior;
-  Clip _clipBehavior = Clip.none;
-  set clipBehavior(Clip value) {
-    assert(value != null);
-    if (value != _clipBehavior) {
-      _clipBehavior = value;
-      markNeedsPaint();
-      markNeedsSemanticsUpdate();
-    }
-  }
-
   void _hasScrolled() {
     markNeedsPaint();
     markNeedsSemanticsUpdate();
@@ -578,8 +548,8 @@
         context.paintChild(child, offset + paintOffset);
       }
 
-      if (_shouldClipAtPaintOffset(paintOffset) && clipBehavior != Clip.none) {
-        context.pushClipRect(needsCompositing, offset, Offset.zero & size, paintContents, clipBehavior: clipBehavior);
+      if (_shouldClipAtPaintOffset(paintOffset)) {
+        context.pushClipRect(needsCompositing, offset, Offset.zero & size, paintContents);
       } else {
         paintContents(context, offset);
       }
diff --git a/packages/flutter/lib/src/widgets/viewport.dart b/packages/flutter/lib/src/widgets/viewport.dart
index e478ec3..2623ad2 100644
--- a/packages/flutter/lib/src/widgets/viewport.dart
+++ b/packages/flutter/lib/src/widgets/viewport.dart
@@ -58,14 +58,12 @@
     this.center,
     this.cacheExtent,
     this.cacheExtentStyle = CacheExtentStyle.pixel,
-    this.clipBehavior = Clip.hardEdge,
     List<Widget> slivers = const <Widget>[],
   }) : assert(offset != null),
        assert(slivers != null),
        assert(center == null || slivers.where((Widget child) => child.key == center).length == 1),
        assert(cacheExtentStyle != null),
        assert(cacheExtentStyle != CacheExtentStyle.viewport || cacheExtent != null),
-       assert(clipBehavior != null),
        super(key: key, children: slivers);
 
   /// The direction in which the [offset]'s [ViewportOffset.pixels] increases.
@@ -120,11 +118,6 @@
   /// {@macro flutter.rendering.viewport.cacheExtentStyle}
   final CacheExtentStyle cacheExtentStyle;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.none].
-  final Clip clipBehavior;
-
   /// Given a [BuildContext] and an [AxisDirection], determine the correct cross
   /// axis direction.
   ///
@@ -154,7 +147,6 @@
       offset: offset,
       cacheExtent: cacheExtent,
       cacheExtentStyle: cacheExtentStyle,
-      clipBehavior: clipBehavior,
     );
   }
 
@@ -166,8 +158,7 @@
       ..anchor = anchor
       ..offset = offset
       ..cacheExtent = cacheExtent
-      ..cacheExtentStyle = cacheExtentStyle
-      ..clipBehavior = clipBehavior;
+      ..cacheExtentStyle = cacheExtentStyle;
   }
 
   @override
@@ -272,7 +263,6 @@
     this.axisDirection = AxisDirection.down,
     this.crossAxisDirection,
     @required this.offset,
-    this.clipBehavior = Clip.hardEdge,
     List<Widget> slivers = const <Widget>[],
   }) : assert(offset != null),
        super(key: key, children: slivers);
@@ -305,18 +295,12 @@
   /// Typically a [ScrollPosition].
   final ViewportOffset offset;
 
-  /// {@macro flutter.widgets.Clip}
-  ///
-  /// Defaults to [Clip.hardEdge].
-  final Clip clipBehavior;
-
   @override
   RenderShrinkWrappingViewport createRenderObject(BuildContext context) {
     return RenderShrinkWrappingViewport(
       axisDirection: axisDirection,
       crossAxisDirection: crossAxisDirection ?? Viewport.getDefaultCrossAxisDirection(context, axisDirection),
       offset: offset,
-      clipBehavior: clipBehavior,
     );
   }
 
@@ -325,8 +309,7 @@
     renderObject
       ..axisDirection = axisDirection
       ..crossAxisDirection = crossAxisDirection ?? Viewport.getDefaultCrossAxisDirection(context, axisDirection)
-      ..offset = offset
-      ..clipBehavior = clipBehavior;
+      ..offset = offset;
   }
 
   @override
diff --git a/packages/flutter/test/material/dropdown_test.dart b/packages/flutter/test/material/dropdown_test.dart
index 3a180bd..1050e89 100644
--- a/packages/flutter/test/material/dropdown_test.dart
+++ b/packages/flutter/test/material/dropdown_test.dart
@@ -2143,8 +2143,8 @@
                           // hard coded 16px margin in the dropdown code, so that
                           // this hint aligns "properly" with the menu.
                           return Stack(
-                            clipBehavior: Clip.none,
                             alignment: Alignment.topCenter,
+                            overflow: Overflow.visible,
                             children: <Widget>[
                               PositionedDirectional(
                                 width: constraints.maxWidth + hintPaddingOffset,
diff --git a/packages/flutter/test/rendering/box_test.dart b/packages/flutter/test/rendering/box_test.dart
index e0dcb784..bb4acbe 100644
--- a/packages/flutter/test/rendering/box_test.dart
+++ b/packages/flutter/test/rendering/box_test.dart
@@ -670,33 +670,6 @@
     expect(unconstrained.size.height, equals(100.0), reason: 'constrained height');
   });
 
-  test('clipBehavior is respected', () {
-    const BoxConstraints viewport = BoxConstraints(maxHeight: 100.0, maxWidth: 100.0);
-    final TestClipPaintingContext context = TestClipPaintingContext();
-
-    // By default, clipBehavior should be Clip.none
-    final RenderUnconstrainedBox defaultBox = RenderUnconstrainedBox(
-      alignment: Alignment.center,
-      textDirection: TextDirection.ltr,
-      child: box200x200,
-    );
-    layout(defaultBox, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-    defaultBox.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.none));
-
-    for (final Clip clip in Clip.values) {
-      final RenderUnconstrainedBox box = RenderUnconstrainedBox(
-          alignment: Alignment.center,
-          textDirection: TextDirection.ltr,
-          child: box200x200,
-          clipBehavior: clip,
-      );
-      layout(box, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-      box.paint(context, Offset.zero);
-      expect(context.clipBehavior, equals(clip));
-    }
-  });
-
   group('hit testing', () {
     test('BoxHitTestResult wrapping HitTestResult', () {
       final HitTestEntry entry1 = HitTestEntry(_DummyHitTestTarget());
diff --git a/packages/flutter/test/rendering/editable_test.dart b/packages/flutter/test/rendering/editable_test.dart
index 1614dea..48d793b 100644
--- a/packages/flutter/test/rendering/editable_test.dart
+++ b/packages/flutter/test/rendering/editable_test.dart
@@ -24,44 +24,6 @@
 }
 
 void main() {
-  test('RenderEditable respects clipBehavior', () {
-    const BoxConstraints viewport = BoxConstraints(maxHeight: 100.0, maxWidth: 100.0);
-    final TestClipPaintingContext context = TestClipPaintingContext();
-
-    final String longString = 'a' * 10000;
-
-    // By default, clipBehavior should be Clip.none
-    final RenderEditable defaultEditable = RenderEditable(
-      text: TextSpan(text: longString),
-      textDirection: TextDirection.ltr,
-      startHandleLayerLink: LayerLink(),
-      endHandleLayerLink: LayerLink(),
-      offset: ViewportOffset.zero(),
-      textSelectionDelegate: FakeEditableTextState(),
-      selection: const TextSelection(baseOffset: 0, extentOffset: 0),
-    );
-    layout(defaultEditable, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-    defaultEditable.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.hardEdge));
-
-    context.clipBehavior = Clip.none; // Reset as Clip.none won't write into clipBehavior.
-    for (final Clip clip in Clip.values) {
-      final RenderEditable editable = RenderEditable(
-        text: TextSpan(text: longString),
-        textDirection: TextDirection.ltr,
-        startHandleLayerLink: LayerLink(),
-        endHandleLayerLink: LayerLink(),
-        offset: ViewportOffset.zero(),
-        textSelectionDelegate: FakeEditableTextState(),
-        selection: const TextSelection(baseOffset: 0, extentOffset: 0),
-        clipBehavior: clip,
-      );
-      layout(editable, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-      editable.paint(context, Offset.zero);
-      expect(context.clipBehavior, equals(clip));
-    }
-  });
-
   test('editable intrinsics', () {
     final TextSelectionDelegate delegate = FakeEditableTextState();
     final RenderEditable editable = RenderEditable(
diff --git a/packages/flutter/test/rendering/flex_test.dart b/packages/flutter/test/rendering/flex_test.dart
index 81ed36c..824aff1 100644
--- a/packages/flutter/test/rendering/flex_test.dart
+++ b/packages/flutter/test/rendering/flex_test.dart
@@ -52,24 +52,6 @@
     FlutterError.onError = oldHandler;
   });
 
-  test('Clip behavior is respected', () {
-    const BoxConstraints viewport = BoxConstraints(maxHeight: 100.0, maxWidth: 100.0);
-    final TestClipPaintingContext context = TestClipPaintingContext();
-
-    // By default, clipBehavior should be Clip.none
-    final RenderFlex defaultFlex = RenderFlex(direction: Axis.vertical, children: <RenderBox>[box200x200]);
-    layout(defaultFlex, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-    defaultFlex.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.none));
-
-    for (final Clip clip in Clip.values) {
-      final RenderFlex flex = RenderFlex(direction: Axis.vertical, children: <RenderBox>[box200x200], clipBehavior: clip);
-      layout(flex, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-      flex.paint(context, Offset.zero);
-      expect(context.clipBehavior, equals(clip));
-    }
-  });
-
   test('Vertical Overflow', () {
     final RenderConstrainedBox flexible = RenderConstrainedBox(
       additionalConstraints: const BoxConstraints.expand()
diff --git a/packages/flutter/test/rendering/proxy_box_test.dart b/packages/flutter/test/rendering/proxy_box_test.dart
index 1d0d180..6a49841 100644
--- a/packages/flutter/test/rendering/proxy_box_test.dart
+++ b/packages/flutter/test/rendering/proxy_box_test.dart
@@ -431,7 +431,6 @@
     _testLayerReuse<ClipRectLayer>(RenderFittedBox(
       alignment: Alignment.center,
       fit: BoxFit.cover,
-      clipBehavior: Clip.hardEdge,
       // Inject opacity under the clip to force compositing.
       child: RenderOpacity(
         opacity: 0.5,
@@ -469,24 +468,6 @@
     _testFittedBoxWithClipRectLayer();
   });
 
-  test('RenderFittedBox respects clipBehavior', () {
-    const BoxConstraints viewport = BoxConstraints(maxHeight: 100.0, maxWidth: 100.0);
-    final TestClipPaintingContext context = TestClipPaintingContext();
-
-    // By default, clipBehavior should be Clip.none
-    final RenderFittedBox defaultBox = RenderFittedBox(child: box200x200, fit: BoxFit.none);
-    layout(defaultBox, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-    defaultBox.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.none));
-
-    for (final Clip clip in Clip.values) {
-      final RenderFittedBox box = RenderFittedBox(child: box200x200, fit: BoxFit.none, clipBehavior: clip);
-      layout(box, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-      box.paint(context, Offset.zero);
-      expect(context.clipBehavior, equals(clip));
-    }
-  });
-
   test('RenderMouseRegion can change properties when detached', () {
     renderer.initMouseTracker(MouseTracker(
       renderer.pointerRouter,
diff --git a/packages/flutter/test/rendering/rendering_tester.dart b/packages/flutter/test/rendering/rendering_tester.dart
index cfd7236..6d24df8 100644
--- a/packages/flutter/test/rendering/rendering_tester.dart
+++ b/packages/flutter/test/rendering/rendering_tester.dart
@@ -294,26 +294,3 @@
     return DiagnosticsProperty<Ticker>(name, this, style: DiagnosticsTreeStyle.errorProperty);
   }
 }
-
-class TestClipPaintingContext extends PaintingContext {
-  TestClipPaintingContext() : super(ContainerLayer(), Rect.zero);
-
-  @override
-  ClipRectLayer pushClipRect(bool needsCompositing, Offset offset, Rect clipRect, PaintingContextCallback painter, {Clip clipBehavior = Clip.hardEdge, ClipRectLayer oldLayer}) {
-    this.clipBehavior = clipBehavior;
-    return null;
-  }
-
-  Clip clipBehavior = Clip.none;
-}
-
-void expectOverflowedErrors() {
-  final FlutterErrorDetails errorDetails = renderer.takeFlutterErrorDetails();
-  final bool overflowed = errorDetails.toString().contains('overflowed');
-  if (!overflowed) {
-    FlutterError.reportError(errorDetails);
-  }
-}
-
-RenderConstrainedBox get box200x200 =>
-    RenderConstrainedBox(additionalConstraints: const BoxConstraints.tightFor(height: 200.0, width: 200.0));
diff --git a/packages/flutter/test/rendering/stack_test.dart b/packages/flutter/test/rendering/stack_test.dart
index 9449f0d..1243dc3 100644
--- a/packages/flutter/test/rendering/stack_test.dart
+++ b/packages/flutter/test/rendering/stack_test.dart
@@ -61,33 +61,6 @@
     expect(stack.size.height, equals(100.0));
   });
 
-  test('Stack respects clipBehavior', () {
-    const BoxConstraints viewport = BoxConstraints(maxHeight: 100.0, maxWidth: 100.0);
-    final TestClipPaintingContext context = TestClipPaintingContext();
-
-    // By default, clipBehavior should be Clip.none
-    final RenderStack defaultStack = RenderStack(textDirection: TextDirection.ltr, children: <RenderBox>[box200x200]);
-    layout(defaultStack, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-    defaultStack.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.none));
-
-    for (final Clip clip in Clip.values) {
-      final RenderBox child = box200x200;
-      final RenderStack stack = RenderStack(
-          textDirection: TextDirection.ltr,
-          children: <RenderBox>[child],
-          clipBehavior: clip,
-      );
-      { // Make sure that the child is positioned so the stack will consider it as overflowed.
-        final StackParentData parentData = child.parentData as StackParentData;
-        parentData.left = parentData.right = 0;
-      }
-      layout(stack, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-      stack.paint(context, Offset.zero);
-      expect(context.clipBehavior, equals(clip));
-    }
-  });
-
   group('RenderIndexedStack', () {
     test('visitChildrenForSemantics only visits displayed child', () {
       final RenderBox child1 = RenderConstrainedBox(
diff --git a/packages/flutter/test/rendering/wrap_test.dart b/packages/flutter/test/rendering/wrap_test.dart
index 7667ff8..e6dac87 100644
--- a/packages/flutter/test/rendering/wrap_test.dart
+++ b/packages/flutter/test/rendering/wrap_test.dart
@@ -5,8 +5,6 @@
 import 'package:flutter/rendering.dart';
 import 'package:flutter_test/flutter_test.dart';
 
-import 'rendering_tester.dart';
-
 void main() {
   test('Wrap test; toStringDeep', () {
     final RenderWrap renderWrap = RenderWrap();
@@ -153,22 +151,4 @@
     expect(renderWrap.computeMinIntrinsicWidth(79), 80);
     expect(renderWrap.computeMinIntrinsicWidth(80), 80);
   });
-
-  test('Wrap respects clipBehavior', () {
-    const BoxConstraints viewport = BoxConstraints(maxHeight: 100.0, maxWidth: 100.0);
-    final TestClipPaintingContext context = TestClipPaintingContext();
-
-    // By default, clipBehavior should be Clip.none
-    final RenderWrap defaultWrap = RenderWrap(textDirection: TextDirection.ltr, children: <RenderBox>[box200x200]);
-    layout(defaultWrap, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-    defaultWrap.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.none));
-
-    for (final Clip clip in Clip.values) {
-      final RenderWrap wrap = RenderWrap(textDirection: TextDirection.ltr, children: <RenderBox>[box200x200], clipBehavior: clip);
-      layout(wrap, constraints: viewport, phase: EnginePhase.composite, onErrors: expectOverflowedErrors);
-      wrap.paint(context, Offset.zero);
-      expect(context.clipBehavior, equals(clip));
-    }
-  });
 }
diff --git a/packages/flutter/test/widgets/basic_test.dart b/packages/flutter/test/widgets/basic_test.dart
index 0c75008..f1c502c 100644
--- a/packages/flutter/test/widgets/basic_test.dart
+++ b/packages/flutter/test/widgets/basic_test.dart
@@ -280,15 +280,6 @@
     );
   });
 
-  testWidgets('UnconstrainedBox can set and update clipBehavior', (WidgetTester tester) async {
-    await tester.pumpWidget(const UnconstrainedBox());
-    final RenderUnconstrainedBox renderObject = tester.allRenderObjects.whereType<RenderUnconstrainedBox>().first;
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-
-    await tester.pumpWidget(const UnconstrainedBox(clipBehavior: Clip.antiAlias));
-    expect(renderObject.clipBehavior, equals(Clip.antiAlias));
-  });
-
   group('ColoredBox', () {
     _MockCanvas mockCanvas;
     _MockPaintingContext mockContext;
diff --git a/packages/flutter/test/widgets/editable_text_test.dart b/packages/flutter/test/widgets/editable_text_test.dart
index 7a3e894..05c4c8e 100644
--- a/packages/flutter/test/widgets/editable_text_test.dart
+++ b/packages/flutter/test/widgets/editable_text_test.dart
@@ -4761,48 +4761,6 @@
 
     expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.text);
   });
-
-  testWidgets('EditableText can set and update clipBehavior', (WidgetTester tester) async {
-    await tester.pumpWidget(MediaQuery(
-      data: const MediaQueryData(devicePixelRatio: 1.0),
-      child: Directionality(
-        textDirection: TextDirection.ltr,
-        child: FocusScope(
-          node: focusScopeNode,
-          autofocus: true,
-          child: EditableText(
-            backgroundCursorColor: Colors.grey,
-            controller: controller,
-            focusNode: focusNode,
-            style: textStyle,
-            cursorColor: cursorColor,
-          ),
-        ),
-      ),
-    ));
-    final RenderEditable renderObject = tester.allRenderObjects.whereType<RenderEditable>().first;
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-
-    await tester.pumpWidget(MediaQuery(
-      data: const MediaQueryData(devicePixelRatio: 1.0),
-      child: Directionality(
-        textDirection: TextDirection.ltr,
-        child: FocusScope(
-          node: focusScopeNode,
-          autofocus: true,
-          child: EditableText(
-            backgroundCursorColor: Colors.grey,
-            controller: controller,
-            focusNode: focusNode,
-            style: textStyle,
-            cursorColor: cursorColor,
-            clipBehavior: Clip.antiAlias,
-          ),
-        ),
-      ),
-    ));
-    expect(renderObject.clipBehavior, equals(Clip.antiAlias));
-  });
 }
 
 class MockTextFormatter extends TextInputFormatter {
diff --git a/packages/flutter/test/widgets/fitted_box_test.dart b/packages/flutter/test/widgets/fitted_box_test.dart
index 7d47d6e..0469a5a 100644
--- a/packages/flutter/test/widgets/fitted_box_test.dart
+++ b/packages/flutter/test/widgets/fitted_box_test.dart
@@ -369,7 +369,6 @@
           height: 10.0,
           child: FittedBox(
             fit: BoxFit.cover,
-            clipBehavior: Clip.hardEdge,
             child: SizedBox(
               width: 10.0,
               height: 50.0,
@@ -392,7 +391,6 @@
           height: 100.0,
           child: FittedBox(
             fit: BoxFit.cover,
-            clipBehavior: Clip.hardEdge,
             child: SizedBox(
               width: 50.0,
               height: 10.0,
@@ -420,7 +418,6 @@
                   height: b,
                   child: FittedBox(
                     fit: BoxFit.none,
-                    clipBehavior: Clip.hardEdge,
                     child: SizedBox(
                       width: c,
                       height: d,
@@ -475,15 +472,6 @@
     await tester.tap(find.byKey(key1));
     expect(_pointerDown, isTrue);
   });
-
-  testWidgets('Can set and update clipBehavior', (WidgetTester tester) async {
-    await tester.pumpWidget(FittedBox(fit: BoxFit.none, child: Container()));
-    final RenderFittedBox renderObject = tester.allRenderObjects.whereType<RenderFittedBox>().first;
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-
-    await tester.pumpWidget(FittedBox(fit: BoxFit.none, child: Container(), clipBehavior: Clip.antiAlias));
-    expect(renderObject.clipBehavior, equals(Clip.antiAlias));
-  });
 }
 
 List<Type> getLayers() {
diff --git a/packages/flutter/test/widgets/flex_test.dart b/packages/flutter/test/widgets/flex_test.dart
index a249a7e..993dc7e 100644
--- a/packages/flutter/test/widgets/flex_test.dart
+++ b/packages/flutter/test/widgets/flex_test.dart
@@ -140,13 +140,4 @@
     final String message = tester.takeException().toString();
     expect(message, contains('\nSee also:'));
   });
-
-  testWidgets('Can set and update clipBehavior', (WidgetTester tester) async {
-    await tester.pumpWidget(Flex(direction: Axis.vertical));
-    final RenderFlex renderObject = tester.allRenderObjects.whereType<RenderFlex>().first;
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-
-    await tester.pumpWidget(Flex(direction: Axis.vertical, clipBehavior: Clip.antiAlias));
-    expect(renderObject.clipBehavior, equals(Clip.antiAlias));
-  });
 }
diff --git a/packages/flutter/test/widgets/framework_test.dart b/packages/flutter/test/widgets/framework_test.dart
index 7586da7..68bb488 100644
--- a/packages/flutter/test/widgets/framework_test.dart
+++ b/packages/flutter/test/widgets/framework_test.dart
@@ -719,7 +719,7 @@
       equalsIgnoringHashCodes(
         'Duplicate keys found.\n'
         'If multiple keyed nodes exist as children of another node, they must have unique keys.\n'
-        'Stack(alignment: AlignmentDirectional.topStart, textDirection: ltr, fit: loose) has multiple children with key [GlobalKey#00000 problematic].'
+        'Stack(alignment: AlignmentDirectional.topStart, textDirection: ltr, fit: loose, overflow: clip) has multiple children with key [GlobalKey#00000 problematic].'
       ),
     );
   });
@@ -889,7 +889,7 @@
         'The specific parent that did not update after having one or more children forcibly '
         'removed due to GlobalKey reparenting is:\n'
         '- Stack(alignment: AlignmentDirectional.topStart, textDirection: ltr, fit: loose, '
-        'renderObject: RenderStack#00000)\n'
+        'overflow: clip, renderObject: RenderStack#00000)\n'
         'A GlobalKey can only be specified on one widget at a time in the widget tree.'
       ),
     );
diff --git a/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart b/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart
index f26e307..4de089f 100644
--- a/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart
+++ b/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart
@@ -11,44 +11,6 @@
 import '../rendering/rendering_tester.dart';
 
 void main() {
-  testWidgets('ListWheelScrollView respects clipBehavior', (WidgetTester tester) async {
-    await tester.pumpWidget(
-      Directionality(
-        textDirection: TextDirection.ltr,
-        child: ListWheelScrollView(
-          itemExtent: 2000.0, // huge extent to trigger clip
-          children: <Widget>[Container()],
-        ),
-      ),
-    );
-
-    // 1st, check that the render object has received the default clip behavior.
-    final RenderListWheelViewport renderObject = tester.allRenderObjects.whereType<RenderListWheelViewport>().first;
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-
-    // 2nd, check that the painting context has received the default clip behavior.
-    final TestClipPaintingContext context = TestClipPaintingContext();
-    renderObject.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.hardEdge));
-
-    // 3rd, pump a new widget to check that the render object can update its clip behavior.
-    await tester.pumpWidget(
-      Directionality(
-        textDirection: TextDirection.ltr,
-        child: ListWheelScrollView(
-          itemExtent: 2000.0, // huge extent to trigger clip
-          children: <Widget>[Container()],
-          clipBehavior: Clip.antiAlias,
-        ),
-      ),
-    );
-    expect(renderObject.clipBehavior, equals(Clip.antiAlias));
-
-    // 4th, check that a non-default clip behavior can be sent to the painting context.
-    renderObject.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.antiAlias));
-  });
-
   group('construction check', () {
     testWidgets('ListWheelScrollView needs positive diameter ratio', (WidgetTester tester) async {
       try {
diff --git a/packages/flutter/test/widgets/nested_scroll_view_test.dart b/packages/flutter/test/widgets/nested_scroll_view_test.dart
index e40ea07..c01c311 100644
--- a/packages/flutter/test/widgets/nested_scroll_view_test.dart
+++ b/packages/flutter/test/widgets/nested_scroll_view_test.dart
@@ -8,8 +8,6 @@
 import 'package:flutter/gestures.dart' show DragStartBehavior;
 import 'package:flutter/rendering.dart';
 
-import '../rendering/rendering_tester.dart';
-
 class _CustomPhysics extends ClampingScrollPhysics {
   const _CustomPhysics({ ScrollPhysics parent }) : super(parent: parent);
 
@@ -120,55 +118,6 @@
 }
 
 void main() {
-  testWidgets('NestedScrollView respects clipBehavior', (WidgetTester tester) async {
-    Widget build(NestedScrollView nestedScrollView) {
-      return Localizations(
-        locale: const Locale('en', 'US'),
-        delegates: const <LocalizationsDelegate<dynamic>>[
-          DefaultMaterialLocalizations.delegate,
-          DefaultWidgetsLocalizations.delegate,
-        ],
-        child: Directionality(
-          textDirection: TextDirection.ltr,
-          child: MediaQuery(
-            data: const MediaQueryData(),
-            child: nestedScrollView,
-          ),
-        ),
-      );
-    }
-
-    await tester.pumpWidget(build(
-      NestedScrollView(
-        headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) => <Widget>[const SliverAppBar()],
-        body: Container(height: 2000.0),
-      )
-    ));
-
-    // 1st, check that the render object has received the default clip behavior.
-    final RenderNestedScrollViewViewport renderObject = tester.allRenderObjects.whereType<RenderNestedScrollViewViewport>().first;
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-
-    // 2nd, check that the painting context has received the default clip behavior.
-    final TestClipPaintingContext context = TestClipPaintingContext();
-    renderObject.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.hardEdge));
-
-    // 3rd, pump a new widget to check that the render object can update its clip behavior.
-    await tester.pumpWidget(build(
-        NestedScrollView(
-          headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) => <Widget>[const SliverAppBar()],
-          body: Container(height: 2000.0),
-          clipBehavior: Clip.antiAlias,
-        )
-    ));
-    expect(renderObject.clipBehavior, equals(Clip.antiAlias));
-
-    // 4th, check that a non-default clip behavior can be sent to the painting context.
-    renderObject.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.antiAlias));
-  });
-
   testWidgets('NestedScrollView overscroll and release and hold', (WidgetTester tester) async {
     await tester.pumpWidget(buildTest());
     expect(find.text('aaa2'), findsOneWidget);
diff --git a/packages/flutter/test/widgets/shrink_wrapping_viewport_test.dart b/packages/flutter/test/widgets/shrink_wrapping_viewport_test.dart
deleted file mode 100644
index f377e11..0000000
--- a/packages/flutter/test/widgets/shrink_wrapping_viewport_test.dart
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2014 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:flutter_test/flutter_test.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
-
-import '../rendering/rendering_tester.dart';
-
-void main() {
-  testWidgets('ShrinkWrappingViewport respects clipBehavior', (WidgetTester tester) async {
-    Widget build(ShrinkWrappingViewport child) {
-      return Directionality(
-        textDirection: TextDirection.ltr,
-        child: child,
-      );
-    }
-
-    await tester.pumpWidget(build(
-        ShrinkWrappingViewport(
-          offset: ViewportOffset.zero(),
-          slivers: <Widget>[SliverToBoxAdapter(child: Container(height: 2000.0))],
-        )
-    ));
-
-    // 1st, check that the render object has received the default clip behavior.
-    final RenderShrinkWrappingViewport renderObject = tester.allRenderObjects.whereType<RenderShrinkWrappingViewport>().first;
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-
-    // 2nd, check that the painting context has received the default clip behavior.
-    final TestClipPaintingContext context = TestClipPaintingContext();
-    renderObject.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.hardEdge));
-
-    // 3rd, pump a new widget to check that the render object can update its clip behavior.
-    await tester.pumpWidget(build(
-        ShrinkWrappingViewport(
-          offset: ViewportOffset.zero(),
-          slivers: <Widget>[SliverToBoxAdapter(child: Container(height: 2000.0))],
-          clipBehavior: Clip.antiAlias,
-        )
-    ));
-    expect(renderObject.clipBehavior, equals(Clip.antiAlias));
-
-    // 4th, check that a non-default clip behavior can be sent to the painting context.
-    renderObject.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.antiAlias));
-  });
-}
diff --git a/packages/flutter/test/widgets/single_child_scroll_view_test.dart b/packages/flutter/test/widgets/single_child_scroll_view_test.dart
index 43dd611..be96c1c 100644
--- a/packages/flutter/test/widgets/single_child_scroll_view_test.dart
+++ b/packages/flutter/test/widgets/single_child_scroll_view_test.dart
@@ -8,7 +8,6 @@
 import 'package:flutter/rendering.dart';
 import 'package:flutter/widgets.dart';
 
-import '../rendering/rendering_tester.dart';
 import 'semantics_tester.dart';
 
 class TestScrollPosition extends ScrollPositionWithSingleContext {
@@ -38,27 +37,6 @@
 }
 
 void main() {
-  testWidgets('SingleChildScrollView respects clipBehavior', (WidgetTester tester) async {
-    await tester.pumpWidget(SingleChildScrollView(child: Container(height: 2000.0)));
-
-    // 1st, check that the render object has received the default clip behavior.
-    final dynamic renderObject = tester.allRenderObjects.where((RenderObject o) => o.runtimeType.toString() == '_RenderSingleChildViewport').first;
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-
-    // 2nd, check that the painting context has received the default clip behavior.
-    final TestClipPaintingContext context = TestClipPaintingContext();
-    renderObject.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.hardEdge));
-
-    // 3rd, pump a new widget to check that the render object can update its clip behavior.
-    await tester.pumpWidget(SingleChildScrollView(clipBehavior: Clip.antiAlias, child: Container(height: 2000.0)));
-    expect(renderObject.clipBehavior, equals(Clip.antiAlias));
-
-    // 4th, check that a non-default clip behavior can be sent to the painting context.
-    renderObject.paint(context, Offset.zero);
-    expect(context.clipBehavior, equals(Clip.antiAlias));
-  });
-
   testWidgets('SingleChildScrollView control test', (WidgetTester tester) async {
     await tester.pumpWidget(SingleChildScrollView(
       child: Container(
diff --git a/packages/flutter/test/widgets/stack_test.dart b/packages/flutter/test/widgets/stack_test.dart
index 878ac4a..7447140 100644
--- a/packages/flutter/test/widgets/stack_test.dart
+++ b/packages/flutter/test/widgets/stack_test.dart
@@ -376,15 +376,6 @@
     expect(renderBox.size.height, equals(12.0));
   });
 
-  testWidgets('Can set and update clipBehavior', (WidgetTester tester) async {
-    await tester.pumpWidget(Stack(textDirection: TextDirection.ltr));
-    final RenderStack renderObject = tester.allRenderObjects.whereType<RenderStack>().first;
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-
-    await tester.pumpWidget(Stack(textDirection: TextDirection.ltr, clipBehavior: Clip.hardEdge));
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-  });
-
   testWidgets('IndexedStack with null index', (WidgetTester tester) async {
     bool tapped;
 
@@ -421,7 +412,6 @@
         textDirection: TextDirection.ltr,
         child: Center(
           child: Stack(
-            clipBehavior: Clip.hardEdge,
             children: const <Widget>[
               SizedBox(
                 width: 100.0,
@@ -452,7 +442,6 @@
         child: Center(
           child: Stack(
             overflow: Overflow.visible,
-            clipBehavior: Clip.none,
             children: const <Widget>[
               SizedBox(
                 width: 100.0,
diff --git a/packages/flutter/test/widgets/wrap_test.dart b/packages/flutter/test/widgets/wrap_test.dart
index d94884d..46b7b83 100644
--- a/packages/flutter/test/widgets/wrap_test.dart
+++ b/packages/flutter/test/widgets/wrap_test.dart
@@ -733,7 +733,6 @@
 
     await tester.pumpWidget(Wrap(
       textDirection: TextDirection.ltr,
-      clipBehavior: Clip.hardEdge,
       children: const <Widget>[
         SizedBox(width: 500.0, height: 500.0),
         SizedBox(width: 500.0, height: 500.0),
@@ -896,13 +895,4 @@
       const Offset(0.0, 20.0),
     ]);
   });
-
-  testWidgets('Wrap can set and update clipBehavior', (WidgetTester tester) async {
-    await tester.pumpWidget(Wrap(textDirection: TextDirection.ltr));
-    final RenderWrap renderObject = tester.allRenderObjects.whereType<RenderWrap>().first;
-    expect(renderObject.clipBehavior, equals(Clip.hardEdge));
-
-    await tester.pumpWidget(Wrap(textDirection: TextDirection.ltr, clipBehavior: Clip.antiAlias));
-    expect(renderObject.clipBehavior, equals(Clip.antiAlias));
-  });
 }