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
}
}
final LayerHandle<OpacityLayer> _avatarOpacityLayerHandler = LayerHandle<OpacityLayer>();
void _paintAvatar(PaintingContext context, Offset offset) {
void paintWithOverlay(PaintingContext context, Offset offset) {
context.paintChild(avatar!, _boxParentData(avatar!).offset + offset);
......@@ -2041,13 +2043,15 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip
}
if (!theme.showAvatar && avatarDrawerAnimation.isDismissed) {
_avatarOpacityLayerHandler.layer = null;
return;
}
final Color disabledColor = _disabledColor;
final int disabledColorAlpha = disabledColor.alpha;
if (needsCompositing) {
context.pushLayer(OpacityLayer(alpha: disabledColorAlpha), paintWithOverlay, offset);
_avatarOpacityLayerHandler.layer = context.pushOpacity(offset, disabledColorAlpha, paintWithOverlay, oldLayer: _avatarOpacityLayerHandler.layer);
} else {
_avatarOpacityLayerHandler.layer = null;
if (disabledColorAlpha != 0xff) {
context.canvas.saveLayer(
_boxRect(avatar).shift(offset).inflate(20.0),
......@@ -2086,6 +2090,12 @@ class _RenderChip extends RenderBox with SlottedContainerRenderObjectMixin<_Chip
}
}
@override
void dispose() {
_avatarOpacityLayerHandler.layer = null;
super.dispose();
}
@override
void paint(PaintingContext context, Offset offset) {
_paintAvatar(context, offset);
......
......@@ -290,12 +290,7 @@ void main() {
expect(labelStyle.overflow, textTheme.bodyLarge?.overflow);
expect(labelStyle.textBaseline, textTheme.bodyLarge?.textBaseline);
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 {
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