Commit 7cde72fe authored by Adam Barth's avatar Adam Barth Committed by GitHub

Make remember_scroll_position_test.dart pass (#8074)

We've decided not to store the scroll position in PageStorage because
routes now maintainState by default.

Fixes #8051
parent cff7dc54
......@@ -124,7 +124,7 @@ abstract class ViewportOffset extends ChangeNotifier {
@mustCallSuper
void debugFillDescription(List<String> description) {
description.add('offset: ${pixels.toStringAsFixed(1)}');
description.add('offset: ${pixels?.toStringAsFixed(1)}');
}
}
......
......@@ -19,13 +19,15 @@ import 'sliver.dart';
class PageController extends ScrollController {
PageController({
this.initialPage: 0,
});
}) {
assert(initialPage != null);
}
final int initialPage;
double get page {
final ScrollPosition position = this.position;
return position.pixels / position.viewportDimension;
final _PagePosition position = this.position;
return position.page;
}
Future<Null> animateToPage(int page, {
......@@ -71,10 +73,14 @@ class _PagePosition extends ScrollPosition {
state: state,
initialPixels: null,
oldPosition: oldPosition,
);
) {
assert(initialPage != null);
}
final int initialPage;
double get page => pixels / viewportDimension;
@override
bool applyViewportDimension(double viewportDimension) {
final double oldViewportDimensions = this.viewportDimension;
......
......@@ -12,7 +12,9 @@ import 'scroll_position.dart';
class ScrollController {
ScrollController({
this.initialScrollOffset: 0.0,
});
}) {
assert(initialScrollOffset != null);
}
/// The initial value to use for [offset].
///
......
......@@ -275,7 +275,7 @@ class ScrollPosition extends ViewportOffset {
}
return true;
});
double oldPixels = _pixels;
final double oldPixels = _pixels;
_pixels = value - overScroll;
if (_pixels != oldPixels) {
notifyListeners();
......
......@@ -13,19 +13,20 @@ class ThePositiveNumbers extends StatelessWidget {
final int from;
@override
Widget build(BuildContext context) {
return new ScrollableLazyList(
return new ListView.builder(
itemExtent: 100.0,
itemBuilder: (BuildContext context, int start, int count) {
List<Widget> result = new List<Widget>();
for (int index = start; index < start + count; index += 1)
result.add(new Text('${index + from}', key: new ValueKey<int>(index)));
return result;
itemBuilder: (BuildContext context, int index) {
return new Text('${index + from}', key: new ValueKey<int>(index));
}
);
}
}
Future<Null> performTest(WidgetTester tester, bool maintainState) async {
Future<Null> performTest(WidgetTester tester) async {
}
void main() {
testWidgets('whether we remember our scroll position', (WidgetTester tester) async {
GlobalKey<NavigatorState> navigatorKey = new GlobalKey<NavigatorState>();
await tester.pumpWidget(new Navigator(
key: navigatorKey,
......@@ -34,13 +35,11 @@ Future<Null> performTest(WidgetTester tester, bool maintainState) async {
return new MaterialPageRoute<Null>(
settings: settings,
builder: (_) => new Container(child: new ThePositiveNumbers(from: 0)),
maintainState: maintainState,
);
} else if (settings.name == '/second') {
return new MaterialPageRoute<Null>(
settings: settings,
builder: (_) => new Container(child: new ThePositiveNumbers(from: 10000)),
maintainState: maintainState,
);
}
return null;
......@@ -59,11 +58,8 @@ Future<Null> performTest(WidgetTester tester, bool maintainState) async {
expect(find.text('10'), findsNothing);
expect(find.text('100'), findsNothing);
Completer<Null> completer = new Completer<Null>();
tester.state<ScrollableState>(find.byType(Scrollable)).scrollTo(1000.0).whenComplete(completer.complete);
expect(completer.isCompleted, isFalse);
tester.state<Scrollable2State>(find.byType(Scrollable2)).position.jumpTo(1000.0);
await tester.pump(const Duration(seconds: 1));
expect(completer.isCompleted, isTrue);
// we're 600 pixels high, each item is 100 pixels high, scroll position is
// 1000, so we should have exactly 6 items, 10..15.
......@@ -100,8 +96,8 @@ Future<Null> performTest(WidgetTester tester, bool maintainState) async {
// Ensure we don't clamp the scroll offset even during the navigation.
// https://github.com/flutter/flutter/issues/4883
LazyListViewport viewport = tester.firstWidget(find.byType(LazyListViewport));
expect(viewport.scrollOffset, equals(1000.0));
Scrollable2State state = tester.state(find.byType(Scrollable2).first);
expect(state.position.pixels, equals(1000.0));
await tester.pump(const Duration(seconds: 1));
......@@ -119,11 +115,5 @@ Future<Null> performTest(WidgetTester tester, bool maintainState) async {
expect(find.text('15'), findsOneWidget);
expect(find.text('16'), findsNothing);
expect(find.text('100'), findsNothing);
}
void main() {
testWidgets('whether we remember our scroll position', (WidgetTester tester) async {
await performTest(tester, true);
await performTest(tester, false);
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment