From 707fccc5ab46b9678c1756c8bd66dada79823625 Mon Sep 17 00:00:00 2001 From: Polina Cherkasova Date: Fri, 22 Sep 2023 15:26:52 -0700 Subject: [PATCH] Fix _paintAvatar in chip.dart to dispose layer. (#135228) --- packages/flutter/lib/src/material/chip.dart | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/flutter/lib/src/material/chip.dart b/packages/flutter/lib/src/material/chip.dart index cbccb25ea2066..757c64269e489 100644 --- a/packages/flutter/lib/src/material/chip.dart +++ b/packages/flutter/lib/src/material/chip.dart @@ -2065,21 +2065,26 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip } } + final LayerHandle _childOpacityLayerHandler = LayerHandle(); + void _paintChild(PaintingContext context, Offset offset, RenderBox? child, bool? isEnabled) { if (child == null) { + _childOpacityLayerHandler.layer = null; return; } final int disabledColorAlpha = _disabledColor.alpha; if (!enableAnimation.isCompleted) { if (needsCompositing) { - context.pushLayer( - OpacityLayer(alpha: disabledColorAlpha), + _childOpacityLayerHandler.layer = context.pushOpacity( + offset, + disabledColorAlpha, (PaintingContext context, Offset offset) { context.paintChild(child, _boxParentData(child).offset + offset); }, - offset, + oldLayer: _childOpacityLayerHandler.layer, ); } else { + _childOpacityLayerHandler.layer = null; final Rect childRect = _boxRect(child).shift(offset); context.canvas.saveLayer(childRect.inflate(20.0), Paint()..color = _disabledColor); context.paintChild(child, _boxParentData(child).offset + offset); @@ -2092,6 +2097,7 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip @override void dispose() { + _childOpacityLayerHandler.layer = null; _avatarOpacityLayerHandler.layer = null; super.dispose(); }