mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Ensure the engineLayer is disposed when an OpacityLayer is disabled (#94280)
This commit is contained in:
parent
5a862ebecd
commit
c567f8439b
@ -1764,11 +1764,16 @@ class OpacityLayer extends OffsetLayer {
|
||||
@override
|
||||
void addToScene(ui.SceneBuilder builder) {
|
||||
assert(alpha != null);
|
||||
bool enabled = firstChild != null; // don't add this layer if there's no child
|
||||
|
||||
// Don't add this layer if there's no child.
|
||||
bool enabled = firstChild != null;
|
||||
if (!enabled) {
|
||||
// Ensure the engineLayer is disposed.
|
||||
engineLayer = null;
|
||||
// TODO(dnfield): Remove this if/when we can fix https://github.com/flutter/flutter/issues/90004
|
||||
return;
|
||||
}
|
||||
|
||||
assert(() {
|
||||
enabled = enabled && !debugDisableOpacityLayers;
|
||||
return true;
|
||||
|
||||
@ -637,6 +637,21 @@ void main() {
|
||||
expect(builder.addedPicture, true);
|
||||
expect(layer.engineLayer, isA<FakeOpacityEngineLayer>());
|
||||
});
|
||||
|
||||
test('OpacityLayer dispose its engineLayer if there are no children', () {
|
||||
final OpacityLayer layer = OpacityLayer(alpha: 128);
|
||||
final FakeSceneBuilder builder = FakeSceneBuilder();
|
||||
layer.addToScene(builder);
|
||||
expect(layer.engineLayer, null);
|
||||
|
||||
layer.append(PictureLayer(Rect.largest)..picture = FakePicture());
|
||||
layer.addToScene(builder);
|
||||
expect(layer.engineLayer, isA<FakeOpacityEngineLayer>());
|
||||
|
||||
layer.removeAllChildren();
|
||||
layer.addToScene(builder);
|
||||
expect(layer.engineLayer, null);
|
||||
});
|
||||
}
|
||||
|
||||
class FakeEngineLayer extends Fake implements EngineLayer {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user