tracking_scroll_controller_test.dart 2.11 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('TrackingScrollController saves offset',
      (WidgetTester tester) async {
    final TrackingScrollController controller = new TrackingScrollController();
12
    const double listItemHeight = 100.0;
13 14 15 16 17 18 19

    await tester.pumpWidget(
      new Directionality(
        textDirection: TextDirection.ltr,
        child: new PageView.builder(
          itemBuilder: (BuildContext context, int index) {
            return new ListView(
Ian Hickson's avatar
Ian Hickson committed
20 21 22 23 24 25 26 27 28
              controller: controller,
              children: new List<Widget>.generate(
                10,
                (int i) => new Container(
                  height: listItemHeight,
                  child: new Text('Page$index-Item$i'),
                ),
              ).toList(),
            );
29 30 31 32 33 34 35 36 37 38 39
          },
        ),
      ),
    );

    expect(find.text('Page0-Item1'), findsOneWidget);
    expect(find.text('Page1-Item1'), findsNothing);
    expect(find.text('Page2-Item0'), findsNothing);
    expect(find.text('Page2-Item1'), findsNothing);

    controller.jumpTo(listItemHeight + 10);
40
    await tester.pumpAndSettle();
41

Ian Hickson's avatar
Ian Hickson committed
42
    await tester.fling(find.text('Page0-Item1'), const Offset(-100.0, 0.0), 10000.0);
43
    await tester.pumpAndSettle();
44 45 46 47 48 49

    expect(find.text('Page0-Item1'), findsNothing);
    expect(find.text('Page1-Item1'), findsOneWidget);
    expect(find.text('Page2-Item0'), findsNothing);
    expect(find.text('Page2-Item1'), findsNothing);

Ian Hickson's avatar
Ian Hickson committed
50
    await tester.fling(find.text('Page1-Item1'), const Offset(-100.0, 0.0), 10000.0);
51
    await tester.pumpAndSettle();
52 53 54 55 56 57

    expect(find.text('Page0-Item1'), findsNothing);
    expect(find.text('Page1-Item1'), findsNothing);
    expect(find.text('Page2-Item0'), findsNothing);
    expect(find.text('Page2-Item1'), findsOneWidget);

Ian Hickson's avatar
Ian Hickson committed
58
    await tester.pumpWidget(const Text('Another page', textDirection: TextDirection.ltr));
59 60 61 62

    expect(controller.initialScrollOffset, 0.0);
  });
}