From b3266b0b6e9107825f5e8194b1eb36bbd2ce827d Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Thu, 13 Feb 2025 14:50:52 +0800 Subject: [PATCH 1/5] feat(FixedExtentScrollController): Add parent class properties to the constructor. --- .../flutter/lib/src/widgets/list_wheel_scroll_view.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart b/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart index 98ced589c7b46..35db6de6f1763 100644 --- a/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart +++ b/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart @@ -219,7 +219,7 @@ class FixedExtentScrollController extends ScrollController { /// Creates a scroll controller for scrollables whose items have the same size. /// /// [initialItem] defaults to zero. - FixedExtentScrollController({this.initialItem = 0, super.onAttach, super.onDetach}); + FixedExtentScrollController({this.initialItem = 0, super.keepScrollOffset, super.debugLabel, super.onAttach, super.onDetach}); /// The page to show when first creating the scroll view. /// @@ -294,6 +294,8 @@ class FixedExtentScrollController extends ScrollController { context: context, initialItem: initialItem, oldPosition: oldPosition, + keepScrollOffset: keepScrollOffset, + debugLabel: debugLabel, ); } } @@ -369,6 +371,8 @@ class _FixedExtentScrollPosition extends ScrollPositionWithSingleContext required super.context, required int initialItem, super.oldPosition, + super.keepScrollOffset, + super.debugLabel, }) : assert( context is _FixedExtentScrollableState, 'FixedExtentScrollController can only be used with ListWheelScrollViews', From 220857a49f16e8839ab9bb6d38870f1f69f68697 Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Thu, 13 Feb 2025 15:44:21 +0800 Subject: [PATCH 2/5] fix: format --- .../flutter/lib/src/widgets/list_wheel_scroll_view.dart | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart b/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart index 35db6de6f1763..386e51b06e44e 100644 --- a/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart +++ b/packages/flutter/lib/src/widgets/list_wheel_scroll_view.dart @@ -219,7 +219,13 @@ class FixedExtentScrollController extends ScrollController { /// Creates a scroll controller for scrollables whose items have the same size. /// /// [initialItem] defaults to zero. - FixedExtentScrollController({this.initialItem = 0, super.keepScrollOffset, super.debugLabel, super.onAttach, super.onDetach}); + FixedExtentScrollController({ + this.initialItem = 0, + super.keepScrollOffset, + super.debugLabel, + super.onAttach, + super.onDetach, + }); /// The page to show when first creating the scroll view. /// From affa4e45cc41a34050b91f69a2579994e9277317 Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Thu, 13 Feb 2025 17:48:11 +0800 Subject: [PATCH 3/5] fix: add test --- .../widgets/list_wheel_scroll_view_test.dart | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart b/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart index 5db9b69dde33f..d0a41887b7d35 100644 --- a/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart +++ b/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart @@ -117,6 +117,66 @@ void main() { expect(detach, 1); }); + testWidgets('FixedExtentScrollController keepScrollOffset', (WidgetTester tester) async { + final PageStorageBucket bucket = PageStorageBucket(); + + Widget buildFrame(ScrollController controller) { + return Directionality( + textDirection: TextDirection.ltr, + child: PageStorage( + bucket: bucket, + child: KeyedSubtree( + key: const PageStorageKey('ListWheelScrollView'), + child: ListWheelScrollView( + key: UniqueKey(), + itemExtent: 100.0, + controller: controller, + children: + List.generate(100, (int index) { + return SizedBox(height: 100.0, width: 400.0, child: Text('Item $index')); + }).toList(), + ), + ), + ), + ); + } + + FixedExtentScrollController controller = FixedExtentScrollController(initialItem: 2); + addTearDown(controller.dispose); + await tester.pumpWidget(buildFrame(controller)); + expect(controller.selectedItem, 2); + expect( + tester.getTopLeft(find.widgetWithText(SizedBox, 'Item 2')), + offsetMoreOrLessEquals(const Offset(200.0, 250.0)), + ); + + controller.jumpToItem(20); + await tester.pump(); + expect(controller.selectedItem, 20); + expect( + tester.getTopLeft(find.widgetWithText(SizedBox, 'Item 20')), + offsetMoreOrLessEquals(const Offset(200.0, 250.0)), + ); + + controller = FixedExtentScrollController(initialItem: 25); + addTearDown(controller.dispose); + await tester.pumpWidget(buildFrame(controller)); + expect(controller.selectedItem, 20); + expect( + tester.getTopLeft(find.widgetWithText(SizedBox, 'Item 20')), + offsetMoreOrLessEquals(const Offset(200.0, 250.0)), + ); + + controller = FixedExtentScrollController(keepScrollOffset: false, initialItem: 10); + addTearDown(controller.dispose); + await tester.pumpWidget(buildFrame(controller)); + expect(controller.selectedItem, 10); + expect( + tester.getTopLeft(find.widgetWithText(SizedBox, 'Item 10')), + offsetMoreOrLessEquals(const Offset(200.0, 250.0)), + ); + }); + testWidgets('ListWheelScrollView needs positive magnification', (WidgetTester tester) async { expect(() { ListWheelScrollView( From 882d3bc94b38d85a8e4bd1bec607de9e5dd6859c Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Tue, 25 Feb 2025 09:52:47 +0800 Subject: [PATCH 4/5] add test --- .../test/widgets/list_wheel_scroll_view_test.dart | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart b/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart index d0a41887b7d35..9b3324653baf3 100644 --- a/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart +++ b/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart @@ -117,6 +117,7 @@ void main() { expect(detach, 1); }); + // Regression test for https://github.com/flutter/flutter/issues/162972 testWidgets('FixedExtentScrollController keepScrollOffset', (WidgetTester tester) async { final PageStorageBucket bucket = PageStorageBucket(); @@ -177,6 +178,15 @@ void main() { ); }); + // Regression test for https://github.com/flutter/flutter/issues/162972 + test('FixedExtentScrollController debugLabel', () { + final FixedExtentScrollController controller = FixedExtentScrollController( + debugLabel: 'MyCustomWidget', + ); + expect(controller.debugLabel, 'MyCustomWidget'); + expect(controller.toString(), contains('MyCustomWidget')); + }); + testWidgets('ListWheelScrollView needs positive magnification', (WidgetTester tester) async { expect(() { ListWheelScrollView( From 2f546f592b3590b4fd7c497a511707d1a24eb66a Mon Sep 17 00:00:00 2001 From: StanleyCocos Date: Wed, 26 Feb 2025 11:47:24 +0800 Subject: [PATCH 5/5] add test offset --- .../flutter/test/widgets/list_wheel_scroll_view_test.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart b/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart index 9b3324653baf3..b41a087645df5 100644 --- a/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart +++ b/packages/flutter/test/widgets/list_wheel_scroll_view_test.dart @@ -146,6 +146,7 @@ void main() { addTearDown(controller.dispose); await tester.pumpWidget(buildFrame(controller)); expect(controller.selectedItem, 2); + expect(controller.offset, 200.0); expect( tester.getTopLeft(find.widgetWithText(SizedBox, 'Item 2')), offsetMoreOrLessEquals(const Offset(200.0, 250.0)), @@ -154,6 +155,7 @@ void main() { controller.jumpToItem(20); await tester.pump(); expect(controller.selectedItem, 20); + expect(controller.offset, 2000.0); expect( tester.getTopLeft(find.widgetWithText(SizedBox, 'Item 20')), offsetMoreOrLessEquals(const Offset(200.0, 250.0)), @@ -163,6 +165,7 @@ void main() { addTearDown(controller.dispose); await tester.pumpWidget(buildFrame(controller)); expect(controller.selectedItem, 20); + expect(controller.offset, 2000.0); expect( tester.getTopLeft(find.widgetWithText(SizedBox, 'Item 20')), offsetMoreOrLessEquals(const Offset(200.0, 250.0)), @@ -172,6 +175,7 @@ void main() { addTearDown(controller.dispose); await tester.pumpWidget(buildFrame(controller)); expect(controller.selectedItem, 10); + expect(controller.offset, 1000.0); expect( tester.getTopLeft(find.widgetWithText(SizedBox, 'Item 10')), offsetMoreOrLessEquals(const Offset(200.0, 250.0)), pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy