From 048baa75913ede225cf140b725dda87f9dc2bebd Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Thu, 3 Jun 2021 17:32:37 -0700 Subject: [PATCH] Always push layer for RenderAnimatedOpacityMixin (#83145) --- packages/flutter/lib/src/rendering/proxy_box.dart | 8 +------- packages/flutter/test/rendering/proxy_box_test.dart | 4 ++-- packages/flutter/test/rendering/proxy_sliver_test.dart | 4 ++-- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart index 503521c4227..3a166ede36a 100644 --- a/packages/flutter/lib/src/rendering/proxy_box.dart +++ b/packages/flutter/lib/src/rendering/proxy_box.dart @@ -993,7 +993,7 @@ mixin RenderAnimatedOpacityMixin on RenderObjectWithChil _alpha = ui.Color.getAlphaFromOpacity(opacity.value); if (oldAlpha != _alpha) { final bool? didNeedCompositing = _currentlyNeedsCompositing; - _currentlyNeedsCompositing = _alpha! > 0 && _alpha! < 255; + _currentlyNeedsCompositing = _alpha! > 0; if (child != null && didNeedCompositing != _currentlyNeedsCompositing) markNeedsCompositingBitsUpdate(); markNeedsPaint(); @@ -1010,12 +1010,6 @@ mixin RenderAnimatedOpacityMixin on RenderObjectWithChil layer = null; return; } - if (_alpha == 255) { - // No need to keep the layer. We'll create a new one if necessary. - layer = null; - context.paintChild(child!, offset); - return; - } assert(needsCompositing); layer = context.pushOpacity(offset, _alpha!, super.paint, oldLayer: layer as OpacityLayer?); } diff --git a/packages/flutter/test/rendering/proxy_box_test.dart b/packages/flutter/test/rendering/proxy_box_test.dart index ee296c8544a..e46510c6674 100644 --- a/packages/flutter/test/rendering/proxy_box_test.dart +++ b/packages/flutter/test/rendering/proxy_box_test.dart @@ -306,7 +306,7 @@ void main() { expect(renderAnimatedOpacity.needsCompositing, false); }); - test('RenderAnimatedOpacity does not composite if it is opaque', () { + test('RenderAnimatedOpacity does composite if it is opaque', () { final Animation opacityAnimation = AnimationController( vsync: FakeTickerProvider(), )..value = 1.0; @@ -318,7 +318,7 @@ void main() { ); layout(renderAnimatedOpacity, phase: EnginePhase.composite); - expect(renderAnimatedOpacity.needsCompositing, false); + expect(renderAnimatedOpacity.needsCompositing, true); }); test('RenderAnimatedOpacity reuses its layer', () { diff --git a/packages/flutter/test/rendering/proxy_sliver_test.dart b/packages/flutter/test/rendering/proxy_sliver_test.dart index 85169d2d5d3..a33845bfe28 100644 --- a/packages/flutter/test/rendering/proxy_sliver_test.dart +++ b/packages/flutter/test/rendering/proxy_sliver_test.dart @@ -102,7 +102,7 @@ void main() { expect(renderSliverAnimatedOpacity.needsCompositing, false); }); - test('RenderSliverAnimatedOpacity does not composite if it is opaque', () { + test('RenderSliverAnimatedOpacity does composite if it is opaque', () { final Animation opacityAnimation = AnimationController( vsync: FakeTickerProvider(), )..value = 1.0; @@ -124,7 +124,7 @@ void main() { ); layout(root, phase: EnginePhase.composite); - expect(renderSliverAnimatedOpacity.needsCompositing, false); + expect(renderSliverAnimatedOpacity.needsCompositing, true); }); test('RenderSliverAnimatedOpacity reuses its layer', () {