Unverified Commit 99ac6b81 authored by Polina Cherkasova's avatar Polina Cherkasova Committed by GitHub

_RenderChip should not create OpacityLayer without disposing. (#134708)

parent 9fe6ed15
...@@ -2034,6 +2034,8 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip ...@@ -2034,6 +2034,8 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip
} }
} }
final LayerHandle<OpacityLayer> _avatarOpacityLayerHandler = LayerHandle<OpacityLayer>();
void _paintAvatar(PaintingContext context, Offset offset) { void _paintAvatar(PaintingContext context, Offset offset) {
void paintWithOverlay(PaintingContext context, Offset offset) { void paintWithOverlay(PaintingContext context, Offset offset) {
context.paintChild(avatar!, _boxParentData(avatar!).offset + offset); context.paintChild(avatar!, _boxParentData(avatar!).offset + offset);
...@@ -2041,13 +2043,15 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip ...@@ -2041,13 +2043,15 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip
} }
if (!theme.showAvatar && avatarDrawerAnimation.isDismissed) { if (!theme.showAvatar && avatarDrawerAnimation.isDismissed) {
_avatarOpacityLayerHandler.layer = null;
return; return;
} }
final Color disabledColor = _disabledColor; final Color disabledColor = _disabledColor;
final int disabledColorAlpha = disabledColor.alpha; final int disabledColorAlpha = disabledColor.alpha;
if (needsCompositing) { if (needsCompositing) {
context.pushLayer(OpacityLayer(alpha: disabledColorAlpha), paintWithOverlay, offset); _avatarOpacityLayerHandler.layer = context.pushOpacity(offset, disabledColorAlpha, paintWithOverlay, oldLayer: _avatarOpacityLayerHandler.layer);
} else { } else {
_avatarOpacityLayerHandler.layer = null;
if (disabledColorAlpha != 0xff) { if (disabledColorAlpha != 0xff) {
context.canvas.saveLayer( context.canvas.saveLayer(
_boxRect(avatar).shift(offset).inflate(20.0), _boxRect(avatar).shift(offset).inflate(20.0),
...@@ -2086,6 +2090,12 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip ...@@ -2086,6 +2090,12 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip
} }
} }
@override
void dispose() {
_avatarOpacityLayerHandler.layer = null;
super.dispose();
}
@override @override
void paint(PaintingContext context, Offset offset) { void paint(PaintingContext context, Offset offset) {
_paintAvatar(context, offset); _paintAvatar(context, offset);
......
...@@ -290,12 +290,7 @@ void main() { ...@@ -290,12 +290,7 @@ void main() {
expect(labelStyle.overflow, textTheme.bodyLarge?.overflow); expect(labelStyle.overflow, textTheme.bodyLarge?.overflow);
expect(labelStyle.textBaseline, textTheme.bodyLarge?.textBaseline); expect(labelStyle.textBaseline, textTheme.bodyLarge?.textBaseline);
expect(labelStyle.wordSpacing, textTheme.bodyLarge?.wordSpacing); expect(labelStyle.wordSpacing, textTheme.bodyLarge?.wordSpacing);
}, });
// TODO(polina-c): remove after fixing
// https://github.com/flutter/flutter/issues/134394
leakTrackingTestConfig: const LeakTrackingTestConfig(
notDisposedAllowList: <String, int?>{'OpacityLayer': 2},
));
testWidgetsWithLeakTracking('M3 Chip defaults', (WidgetTester tester) async { testWidgetsWithLeakTracking('M3 Chip defaults', (WidgetTester tester) async {
late TextTheme textTheme; late TextTheme textTheme;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment