Always push layer for RenderAnimatedOpacityMixin (#83145)
diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart
index 503521c..3a166ed 100644
--- a/packages/flutter/lib/src/rendering/proxy_box.dart
+++ b/packages/flutter/lib/src/rendering/proxy_box.dart
@@ -993,7 +993,7 @@
_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 @@
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 ee296c8..e46510c 100644
--- a/packages/flutter/test/rendering/proxy_box_test.dart
+++ b/packages/flutter/test/rendering/proxy_box_test.dart
@@ -306,7 +306,7 @@
expect(renderAnimatedOpacity.needsCompositing, false);
});
- test('RenderAnimatedOpacity does not composite if it is opaque', () {
+ test('RenderAnimatedOpacity does composite if it is opaque', () {
final Animation<double> opacityAnimation = AnimationController(
vsync: FakeTickerProvider(),
)..value = 1.0;
@@ -318,7 +318,7 @@
);
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 85169d2..a33845b 100644
--- a/packages/flutter/test/rendering/proxy_sliver_test.dart
+++ b/packages/flutter/test/rendering/proxy_sliver_test.dart
@@ -102,7 +102,7 @@
expect(renderSliverAnimatedOpacity.needsCompositing, false);
});
- test('RenderSliverAnimatedOpacity does not composite if it is opaque', () {
+ test('RenderSliverAnimatedOpacity does composite if it is opaque', () {
final Animation<double> opacityAnimation = AnimationController(
vsync: FakeTickerProvider(),
)..value = 1.0;
@@ -124,7 +124,7 @@
);
layout(root, phase: EnginePhase.composite);
- expect(renderSliverAnimatedOpacity.needsCompositing, false);
+ expect(renderSliverAnimatedOpacity.needsCompositing, true);
});
test('RenderSliverAnimatedOpacity reuses its layer', () {