From 6c29986b2868bc1bd2779ff41b1331b3fedbf9be Mon Sep 17 00:00:00 2001 From: Kostia Sokolovskyi Date: Thu, 7 Dec 2023 22:24:15 +0100 Subject: [PATCH] SnapshotPainter should dispatch creation and disposal events. (#138810) --- packages/flutter/lib/src/widgets/snapshot_widget.dart | 10 +++++++++- .../flutter/test/widgets/snapshot_widget_test.dart | 10 ++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/widgets/snapshot_widget.dart b/packages/flutter/lib/src/widgets/snapshot_widget.dart index c680d58533..193616fe38 100644 --- a/packages/flutter/lib/src/widgets/snapshot_widget.dart +++ b/packages/flutter/lib/src/widgets/snapshot_widget.dart @@ -4,6 +4,7 @@ import 'dart:ui' as ui; +import 'package:flutter/foundation.dart'; import 'package:flutter/rendering.dart'; import 'basic.dart'; @@ -385,7 +386,14 @@ class _RenderSnapshotWidget extends RenderProxyBox { /// } /// ``` /// {@end-tool} -abstract class SnapshotPainter extends ChangeNotifier { +abstract class SnapshotPainter extends ChangeNotifier { + /// Creates an instance of [SnapshotPainter]. + SnapshotPainter() { + if (kFlutterMemoryAllocationsEnabled) { + ChangeNotifier.maybeDispatchObjectCreation(this); + } + } + /// Called whenever the [image] that represents a [SnapshotWidget]s child should be painted. /// /// The image is rasterized at the physical pixel resolution and should be scaled down by diff --git a/packages/flutter/test/widgets/snapshot_widget_test.dart b/packages/flutter/test/widgets/snapshot_widget_test.dart index 7bc8cd7761..7d6df8b23f 100644 --- a/packages/flutter/test/widgets/snapshot_widget_test.dart +++ b/packages/flutter/test/widgets/snapshot_widget_test.dart @@ -326,6 +326,16 @@ void main() { await expectLater(find.byKey(repaintBoundaryKey), matchesReferenceImage(imageWhenDisabled)); }, skip: kIsWeb); // TODO(jonahwilliams): https://github.com/flutter/flutter/issues/106689 + + test('SnapshotPainter dispatches memory events', () async { + await expectLater( + await memoryEvents( + () => TestPainter().dispose(), + TestPainter, + ), + areCreateAndDispose, + ); + }); } class TestPlatformView extends SingleChildRenderObjectWidget {