Skip to content

Commit e331e3d

Browse files
Jonah Williamsitsjustkevin
andauthored
[framework] revert removal of opacity (flutter#111202) (flutter#111207)
Co-authored-by: Kevin Chisholm <kevinjchisholm@google.com>
1 parent 5870540 commit e331e3d

File tree

4 files changed

+12
-16
lines changed

4 files changed

+12
-16
lines changed

packages/flutter/lib/src/rendering/proxy_box.dart

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -883,7 +883,7 @@ class RenderOpacity extends RenderProxyBox {
883883
super(child);
884884

885885
@override
886-
bool get alwaysNeedsCompositing => child != null && (_alpha > 0 && _alpha < 255);
886+
bool get alwaysNeedsCompositing => child != null && _alpha > 0;
887887

888888
int _alpha;
889889

@@ -949,11 +949,6 @@ class RenderOpacity extends RenderProxyBox {
949949
layer = null;
950950
return;
951951
}
952-
if (_alpha == 255) {
953-
// No need to keep the layer. We'll create a new one if necessary.
954-
layer = null;
955-
return super.paint(context, offset);
956-
}
957952

958953
assert(needsCompositing);
959954
layer = context.pushOpacity(offset, _alpha, super.paint, oldLayer: layer as OpacityLayer?);
@@ -1060,7 +1055,7 @@ mixin RenderAnimatedOpacityMixin<T extends RenderObject> on RenderObjectWithChil
10601055
_alpha = ui.Color.getAlphaFromOpacity(opacity.value);
10611056
if (oldAlpha != _alpha) {
10621057
final bool? wasRepaintBoundary = _currentlyIsRepaintBoundary;
1063-
_currentlyIsRepaintBoundary = _alpha! > 0 && _alpha! < 255;
1058+
_currentlyIsRepaintBoundary = _alpha! > 0;
10641059
if (child != null && wasRepaintBoundary != _currentlyIsRepaintBoundary) {
10651060
markNeedsCompositingBitsUpdate();
10661061
}

packages/flutter/test/rendering/proxy_box_test.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,13 +240,13 @@ void main() {
240240
expect(renderOpacity.needsCompositing, false);
241241
});
242242

243-
test('RenderOpacity does not composite if it is opaque', () {
243+
test('RenderOpacity does composite if it is opaque', () {
244244
final RenderOpacity renderOpacity = RenderOpacity(
245245
child: RenderSizedBox(const Size(1.0, 1.0)), // size doesn't matter
246246
);
247247

248248
layout(renderOpacity, phase: EnginePhase.composite);
249-
expect(renderOpacity.needsCompositing, false);
249+
expect(renderOpacity.needsCompositing, true);
250250
});
251251

252252
test('RenderOpacity does composite if it is partially opaque', () {
@@ -282,7 +282,7 @@ void main() {
282282
expect(renderAnimatedOpacity.needsCompositing, false);
283283
});
284284

285-
test('RenderAnimatedOpacity does not composite if it is opaque', () {
285+
test('RenderAnimatedOpacity does composite if it is opaque', () {
286286
final Animation<double> opacityAnimation = AnimationController(
287287
vsync: FakeTickerProvider(),
288288
)..value = 1.0;
@@ -293,7 +293,7 @@ void main() {
293293
);
294294

295295
layout(renderAnimatedOpacity, phase: EnginePhase.composite);
296-
expect(renderAnimatedOpacity.needsCompositing, false);
296+
expect(renderAnimatedOpacity.needsCompositing, true);
297297
});
298298

299299
test('RenderAnimatedOpacity does composite if it is partially opaque', () {

packages/flutter/test/rendering/proxy_sliver_test.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ void main() {
4747
layout(root, phase: EnginePhase.composite);
4848
expect(renderSliverOpacity.needsCompositing, true);
4949
});
50+
5051
test('RenderSliverOpacity reuses its layer', () {
5152
final RenderSliverOpacity renderSliverOpacity = RenderSliverOpacity(
5253
opacity: 0.5,
@@ -121,7 +122,7 @@ void main() {
121122
expect(renderSliverAnimatedOpacity.needsCompositing, true);
122123
});
123124

124-
test('RenderSliverAnimatedOpacity does not composite if it is opaque', () {
125+
test('RenderSliverAnimatedOpacity does composite if it is opaque', () {
125126
final Animation<double> opacityAnimation = AnimationController(
126127
vsync: FakeTickerProvider(),
127128
)..value = 1.0;
@@ -141,7 +142,7 @@ void main() {
141142
);
142143

143144
layout(root, phase: EnginePhase.composite);
144-
expect(renderSliverAnimatedOpacity.needsCompositing, false);
145+
expect(renderSliverAnimatedOpacity.needsCompositing, true);
145146
});
146147

147148
test('RenderSliverAnimatedOpacity reuses its layer', () {

packages/flutter/test/widgets/animated_opacity_repaint_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:flutter/rendering.dart';
77
import 'package:flutter_test/flutter_test.dart';
88

99
void main() {
10-
testWidgets('RenderAnimatedOpacityMixin drops layer when animating to 1', (WidgetTester tester) async {
10+
testWidgets('RenderAnimatedOpacityMixin does not drop layer when animating to 1', (WidgetTester tester) async {
1111
RenderTestObject.paintCount = 0;
1212
final AnimationController controller = AnimationController(vsync: const TestVSync(), duration: const Duration(seconds: 1));
1313
final Tween<double> opacityTween = Tween<double>(begin: 0, end: 1);
@@ -32,12 +32,12 @@ void main() {
3232
await tester.pump();
3333
await tester.pump(const Duration(milliseconds: 500));
3434

35-
expect(RenderTestObject.paintCount, 2);
35+
expect(RenderTestObject.paintCount, 1);
3636

3737
controller.stop();
3838
await tester.pump();
3939

40-
expect(RenderTestObject.paintCount, 2);
40+
expect(RenderTestObject.paintCount, 1);
4141
});
4242

4343
testWidgets('RenderAnimatedOpacityMixin avoids repainting child as it animates', (WidgetTester tester) async {

0 commit comments

Comments
 (0)