From a11b21dba87c987fc004d2aaace604b82ec6c831 Mon Sep 17 00:00:00 2001 From: Kostia Sokolovskyi Date: Fri, 29 Sep 2023 23:08:39 +0200 Subject: [PATCH] ViewportOffset should dispatch creation in constructor. (#135420) --- .../lib/src/rendering/viewport_offset.dart | 6 +- .../two_dimensional_viewport_test.dart | 63 ++++++++++++++----- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/packages/flutter/lib/src/rendering/viewport_offset.dart b/packages/flutter/lib/src/rendering/viewport_offset.dart index 44d5caddc2c..071bcedf02e 100644 --- a/packages/flutter/lib/src/rendering/viewport_offset.dart +++ b/packages/flutter/lib/src/rendering/viewport_offset.dart @@ -97,7 +97,11 @@ abstract class ViewportOffset extends ChangeNotifier { /// Default constructor. /// /// Allows subclasses to construct this object directly. - ViewportOffset(); + ViewportOffset() { + if (kFlutterMemoryAllocationsEnabled) { + ChangeNotifier.maybeDispatchObjectCreation(this); + } + } /// Creates a viewport offset with the given [pixels] value. /// diff --git a/packages/flutter/test/widgets/two_dimensional_viewport_test.dart b/packages/flutter/test/widgets/two_dimensional_viewport_test.dart index b7432de826f..28f3bcac73b 100644 --- a/packages/flutter/test/widgets/two_dimensional_viewport_test.dart +++ b/packages/flutter/test/widgets/two_dimensional_viewport_test.dart @@ -1441,10 +1441,15 @@ void main() { // Horizontal mismatch expect( () { + final ViewportOffset verticalOffset = ViewportOffset.fixed(0.0); + addTearDown(verticalOffset.dispose); + final ViewportOffset horizontalOffset = ViewportOffset.fixed(0.0); + addTearDown(horizontalOffset.dispose); + SimpleBuilderTableViewport( - verticalOffset: ViewportOffset.fixed(0.0), + verticalOffset: verticalOffset, verticalAxisDirection: AxisDirection.left, - horizontalOffset: ViewportOffset.fixed(0.0), + horizontalOffset: horizontalOffset, horizontalAxisDirection: AxisDirection.right, delegate: builderDelegate, mainAxis: Axis.vertical, @@ -1462,10 +1467,15 @@ void main() { // Vertical mismatch expect( () { + final ViewportOffset verticalOffset = ViewportOffset.fixed(0.0); + addTearDown(verticalOffset.dispose); + final ViewportOffset horizontalOffset = ViewportOffset.fixed(0.0); + addTearDown(horizontalOffset.dispose); + SimpleBuilderTableViewport( - verticalOffset: ViewportOffset.fixed(0.0), + verticalOffset: verticalOffset, verticalAxisDirection: AxisDirection.up, - horizontalOffset: ViewportOffset.fixed(0.0), + horizontalOffset: horizontalOffset, horizontalAxisDirection: AxisDirection.down, delegate: builderDelegate, mainAxis: Axis.vertical, @@ -1483,10 +1493,15 @@ void main() { // Both expect( () { + final ViewportOffset verticalOffset = ViewportOffset.fixed(0.0); + addTearDown(verticalOffset.dispose); + final ViewportOffset horizontalOffset = ViewportOffset.fixed(0.0); + addTearDown(horizontalOffset.dispose); + SimpleBuilderTableViewport( - verticalOffset: ViewportOffset.fixed(0.0), + verticalOffset: verticalOffset, verticalAxisDirection: AxisDirection.left, - horizontalOffset: ViewportOffset.fixed(0.0), + horizontalOffset: horizontalOffset, horizontalAxisDirection: AxisDirection.down, delegate: builderDelegate, mainAxis: Axis.vertical, @@ -1548,10 +1563,15 @@ void main() { // Horizontal mismatch expect( () { + final ViewportOffset verticalOffset = ViewportOffset.fixed(0.0); + addTearDown(verticalOffset.dispose); + final ViewportOffset horizontalOffset = ViewportOffset.fixed(0.0); + addTearDown(horizontalOffset.dispose); + RenderSimpleBuilderTableViewport( - verticalOffset: ViewportOffset.fixed(0.0), + verticalOffset: verticalOffset, verticalAxisDirection: AxisDirection.left, - horizontalOffset: ViewportOffset.fixed(0.0), + horizontalOffset: horizontalOffset, horizontalAxisDirection: AxisDirection.right, delegate: builderDelegate, mainAxis: Axis.vertical, @@ -1570,10 +1590,15 @@ void main() { // Vertical mismatch expect( () { + final ViewportOffset verticalOffset = ViewportOffset.fixed(0.0); + addTearDown(verticalOffset.dispose); + final ViewportOffset horizontalOffset = ViewportOffset.fixed(0.0); + addTearDown(horizontalOffset.dispose); + RenderSimpleBuilderTableViewport( - verticalOffset: ViewportOffset.fixed(0.0), + verticalOffset: verticalOffset, verticalAxisDirection: AxisDirection.up, - horizontalOffset: ViewportOffset.fixed(0.0), + horizontalOffset: horizontalOffset, horizontalAxisDirection: AxisDirection.down, delegate: builderDelegate, mainAxis: Axis.vertical, @@ -1592,10 +1617,15 @@ void main() { // Both expect( () { + final ViewportOffset verticalOffset = ViewportOffset.fixed(0.0); + addTearDown(verticalOffset.dispose); + final ViewportOffset horizontalOffset = ViewportOffset.fixed(0.0); + addTearDown(horizontalOffset.dispose); + RenderSimpleBuilderTableViewport( - verticalOffset: ViewportOffset.fixed(0.0), + verticalOffset: verticalOffset, verticalAxisDirection: AxisDirection.left, - horizontalOffset: ViewportOffset.fixed(0.0), + horizontalOffset: horizontalOffset, horizontalAxisDirection: AxisDirection.down, delegate: builderDelegate, mainAxis: Axis.vertical, @@ -1622,10 +1652,15 @@ void main() { } ); addTearDown(delegate.dispose); + final ViewportOffset verticalOffset = ViewportOffset.fixed(10.0); + addTearDown(verticalOffset.dispose); + final ViewportOffset horizontalOffset = ViewportOffset.fixed(20.0); + addTearDown(horizontalOffset.dispose); + final RenderSimpleBuilderTableViewport renderViewport = RenderSimpleBuilderTableViewport( - verticalOffset: ViewportOffset.fixed(10.0), + verticalOffset: verticalOffset, verticalAxisDirection: AxisDirection.down, - horizontalOffset: ViewportOffset.fixed(20.0), + horizontalOffset: horizontalOffset, horizontalAxisDirection: AxisDirection.right, delegate: delegate, mainAxis: Axis.vertical,