From 1189d442407abd89eedf96cddffb1a2db49a5582 Mon Sep 17 00:00:00 2001 From: Dimil Kalathiya <102401667+Dimilkalathiya@users.noreply.github.com> Date: Sun, 28 Apr 2024 06:00:58 +0530 Subject: [PATCH] Fix `_RenderValueIndicator` leak (#147451) --- packages/flutter/lib/src/material/slider.dart | 8 +++++++- packages/flutter/test/material/slider_test.dart | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/material/slider.dart b/packages/flutter/lib/src/material/slider.dart index 442a0ccb1b4f4..22a172a82d2a3 100644 --- a/packages/flutter/lib/src/material/slider.dart +++ b/packages/flutter/lib/src/material/slider.dart @@ -1868,7 +1868,7 @@ class _RenderValueIndicator extends RenderBox with RelayoutWhenSystemFontsChange curve: Curves.fastOutSlowIn, ); } - late Animation _valueIndicatorAnimation; + late CurvedAnimation _valueIndicatorAnimation; _SliderState _state; @override @@ -1897,6 +1897,12 @@ class _RenderValueIndicator extends RenderBox with RelayoutWhenSystemFontsChange Size computeDryLayout(BoxConstraints constraints) { return constraints.smallest; } + + @override + void dispose() { + _valueIndicatorAnimation.dispose(); + super.dispose(); + } } class _SliderDefaultsM2 extends SliderThemeData { diff --git a/packages/flutter/test/material/slider_test.dart b/packages/flutter/test/material/slider_test.dart index 97c07817f93da..ec3ef60ef8734 100644 --- a/packages/flutter/test/material/slider_test.dart +++ b/packages/flutter/test/material/slider_test.dart @@ -13,6 +13,7 @@ import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; import 'package:flutter/src/physics/utils.dart' show nearEqual; import 'package:flutter_test/flutter_test.dart'; +import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart'; import '../widgets/semantics_tester.dart'; @@ -140,7 +141,10 @@ void main() { expect(log[0], const Offset(212.0, 300.0)); }); - testWidgets('Slider can move when tapped (LTR)', (WidgetTester tester) async { + testWidgets( + // TODO(polina-c): remove when fixed https://github.com/flutter/flutter/issues/145600 [leak-tracking-opt-in] + experimentalLeakTesting: LeakTesting.settings.withTracked(classes: ['CurvedAnimation']), + 'Slider can move when tapped (LTR)', (WidgetTester tester) async { final Key sliderKey = UniqueKey(); double value = 0.0; double? startValue;