From e7ca9328c4e444246c61962d78373494e2ae92a9 Mon Sep 17 00:00:00 2001 From: robinsontom Date: Wed, 26 Apr 2023 13:32:06 -0700 Subject: [PATCH 1/3] [scrollable_positioned_list] Fix default cache extents for horizontal lists. Closes #439 #453 --- .../lib/src/scrollable_positioned_list.dart | 6 +++- ...ontal_scrollable_positioned_list_test.dart | 34 +++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart b/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart index 6e270f6d..ed6a45a9 100644 --- a/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart +++ b/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart @@ -6,6 +6,7 @@ import 'dart:async'; import 'dart:math'; import 'package:collection/collection.dart' show IterableExtension; +import 'package:flutter/rendering.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/widgets.dart'; @@ -410,7 +411,10 @@ class _ScrollablePositionedListState extends State } double _cacheExtent(BoxConstraints constraints) => max( - constraints.maxHeight * _screenScrollCount, + (widget.scrollDirection == Axis.vertical + ? constraints.maxHeight + : constraints.maxWidth) * + _screenScrollCount, widget.minCacheExtent ?? 0, ); diff --git a/packages/scrollable_positioned_list/test/horizontal_scrollable_positioned_list_test.dart b/packages/scrollable_positioned_list/test/horizontal_scrollable_positioned_list_test.dart index fb9f5c89..a5d7df1b 100644 --- a/packages/scrollable_positioned_list/test/horizontal_scrollable_positioned_list_test.dart +++ b/packages/scrollable_positioned_list/test/horizontal_scrollable_positioned_list_test.dart @@ -7,7 +7,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:pedantic/pedantic.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; -const screenHeight = 400.0; +const screenHeight = 100.0; const screenWidth = 400.0; const itemWidth = screenWidth / 10.0; const itemCount = 500; @@ -45,6 +45,11 @@ void main() { ); } + final Finder fadeTransitionFinder = find.descendant( + of: find.byType(ScrollablePositionedList), + matching: find.byType(FadeTransition), + ); + testWidgets('List positioned with 0 at left', (WidgetTester tester) async { final itemPositionsListener = ItemPositionsListener.create(); await setUpWidgetTest(tester, itemPositionsListener: itemPositionsListener); @@ -171,7 +176,7 @@ void main() { await tester.pumpAndSettle(); expect(tester.getTopLeft(find.text('Item 100')).dx, 0); - expect(tester.getBottomRight(find.text('Item 109')).dy, screenWidth); + expect(tester.getBottomRight(find.text('Item 109')).dy, screenHeight); expect( itemPositionsListener.itemPositions.value @@ -195,6 +200,31 @@ void main() { 1); }); + testWidgets('Scroll to 20 without fading', (WidgetTester tester) async { + final itemScrollController = ItemScrollController(); + final itemPositionsListener = ItemPositionsListener.create(); + await setUpWidgetTest(tester, + itemScrollController: itemScrollController, + itemPositionsListener: itemPositionsListener); + + var fadeTransition = tester.widget(fadeTransitionFinder); + final initialOpacity = fadeTransition.opacity; + + unawaited( + itemScrollController.scrollTo(index: 20, duration: scrollDuration)); + await tester.pump(); + await tester.pump(); + await tester.pump(scrollDuration ~/ 2); + + fadeTransition = tester.widget(fadeTransitionFinder); + expect(fadeTransition.opacity, initialOpacity); + + await tester.pumpAndSettle(); + + expect(find.text('Item 14'), findsNothing); + expect(find.text('Item 20'), findsOneWidget); + }); + testWidgets('padding test - centered sliver at left', (WidgetTester tester) async { final itemScrollController = ItemScrollController(); From 659b1d92478b8acb55c86062b8e72a704b031093 Mon Sep 17 00:00:00 2001 From: robinsontom Date: Wed, 26 Apr 2023 13:43:17 -0700 Subject: [PATCH 2/3] Remove unneeded import --- .../lib/src/scrollable_positioned_list.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart b/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart index ed6a45a9..83fdcbae 100644 --- a/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart +++ b/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart @@ -6,7 +6,6 @@ import 'dart:async'; import 'dart:math'; import 'package:collection/collection.dart' show IterableExtension; -import 'package:flutter/rendering.dart'; import 'package:flutter/scheduler.dart'; import 'package:flutter/widgets.dart'; From 6b8c7e1e28c65bcb2bf6861811d89e7bfb9b1af1 Mon Sep 17 00:00:00 2001 From: robinsontom Date: Wed, 26 Apr 2023 13:49:30 -0700 Subject: [PATCH 3/3] Remove unneeded unwrap --- .../lib/src/scrollable_positioned_list.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart b/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart index 83fdcbae..ad62ca2c 100644 --- a/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart +++ b/packages/scrollable_positioned_list/lib/src/scrollable_positioned_list.dart @@ -275,7 +275,7 @@ class _ScrollablePositionedListState extends State @override void initState() { super.initState(); - ItemPosition? initialPosition = PageStorage.of(context)!.readState(context); + ItemPosition? initialPosition = PageStorage.of(context).readState(context); primary.target = initialPosition?.index ?? widget.initialScrollIndex; primary.alignment = initialPosition?.itemLeadingEdge ?? widget.initialAlignment; @@ -571,7 +571,7 @@ class _ScrollablePositionedListState extends State .where((ItemPosition position) => position.itemLeadingEdge < 1 && position.itemTrailingEdge > 0); if (itemPositions.isNotEmpty) { - PageStorage.of(context)!.writeState( + PageStorage.of(context).writeState( context, itemPositions.reduce((value, element) => value.itemLeadingEdge < element.itemLeadingEdge