Skip to content

Commit d134345

Browse files
authored
Fix RangeSlider throws an exception in a ListView (#135667)
fixes [[RangeSlider] [Flutter 3.10] LateInitializationError: Field '_startThumbCenter@280317193' has not been initialized.](flutter/flutter#126648) ### Code sample (Run it on iOS) <details> <summary>expand to view the code sample</summary> ```dart import 'package:flutter/material.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); @OverRide Widget build(BuildContext context) { return const MaterialApp( debugShowCheckedModeBanner: false, home: Example(), ); } } class Example extends StatelessWidget { const Example({super.key}); @OverRide Widget build(BuildContext context) { return Scaffold( body: ListView( children: <Widget>[ const SizedBox( height: 1000, child: Placeholder(), ), RangeSlider( values: const RangeValues(0.25, 0.75), onChanged: (value) {}, ), ], ), ); } } ``` </details>
1 parent 449c927 commit d134345

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

packages/flutter/lib/src/material/range_slider.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -900,8 +900,8 @@ class _RenderRangeSlider extends RenderBox with RelayoutWhenSystemFontsChangeMix
900900
late TapGestureRecognizer _tap;
901901
bool _active = false;
902902
late RangeValues _newValues;
903-
late Offset _startThumbCenter;
904-
late Offset _endThumbCenter;
903+
Offset _startThumbCenter = Offset.zero;
904+
Offset _endThumbCenter = Offset.zero;
905905
Rect? overlayStartRect;
906906
Rect? overlayEndRect;
907907

packages/flutter/test/material/range_slider_test.dart

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2541,7 +2541,7 @@ void main() {
25412541
);
25422542
});
25432543

2544-
testWidgetsWithLeakTracking('RangeSlider onChangeStart and onChangeEnd fire once', (WidgetTester tester) async {
2544+
testWidgetsWithLeakTracking('RangeSlider onChangeStart and onChangeEnd fire once', (WidgetTester tester) async {
25452545
// Regression test for https://github.com/flutter/flutter/issues/128433
25462546

25472547
int startFired = 0;
@@ -2581,4 +2581,34 @@ void main() {
25812581
expect(startFired, equals(1));
25822582
expect(endFired, equals(1));
25832583
});
2584+
2585+
testWidgetsWithLeakTracking('RangeSlider in a ListView does not throw an exception', (WidgetTester tester) async {
2586+
// Regression test for https://github.com/flutter/flutter/issues/126648
2587+
2588+
await tester.pumpWidget(
2589+
MaterialApp(
2590+
home: Directionality(
2591+
textDirection: TextDirection.ltr,
2592+
child: Material(
2593+
child: ListView(
2594+
children: <Widget>[
2595+
const SizedBox(
2596+
height: 600,
2597+
child: Placeholder(),
2598+
),
2599+
RangeSlider(
2600+
values: const RangeValues(40, 80),
2601+
max: 100,
2602+
onChanged: (RangeValues newValue) { },
2603+
),
2604+
],
2605+
),
2606+
),
2607+
),
2608+
),
2609+
);
2610+
2611+
// No exception should be thrown.
2612+
expect(tester.takeException(), null);
2613+
});
25842614
}

0 commit comments

Comments
 (0)