flexible_space_bar_collapse_mode_test.dart 4.64 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

Dan Field's avatar
Dan Field committed
5
import 'package:flutter/foundation.dart';
6 7 8
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

9
final Key blockKey = UniqueKey();
10
const double expandedAppbarHeight = 250.0;
11
final Key appbarContainerKey = UniqueKey();
12 13

void main() {
Dan Field's avatar
Dan Field committed
14
  testWidgets('FlexibleSpaceBar collapse mode none', (WidgetTester tester) async {
15
    await tester.pumpWidget(
16
      MaterialApp(
Dan Field's avatar
Dan Field committed
17
        theme: ThemeData(platform: debugDefaultTargetPlatformOverride),
18 19
        home: Scaffold(
          body: CustomScrollView(
20 21
            key: blockKey,
            slivers: <Widget>[
22
              SliverAppBar(
23 24
                expandedHeight: expandedAppbarHeight,
                pinned: true,
25 26
                flexibleSpace: FlexibleSpaceBar(
                  background: Container(
27 28 29 30 31
                    key: appbarContainerKey,
                  ),
                  collapseMode: CollapseMode.none,
                ),
              ),
32 33
              SliverToBoxAdapter(
                child: Container(
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
                  height: 10000.0,
                ),
              ),
            ],
          ),
        ),
      ),
    );

    final Finder appbarContainer = find.byKey(appbarContainerKey);
    final Offset topBeforeScroll = tester.getTopLeft(appbarContainer);
    await slowDrag(tester, blockKey, const Offset(0.0, -100.0));
    final Offset topAfterScroll = tester.getTopLeft(appbarContainer);

    expect(topBeforeScroll.dy, equals(0.0));
    expect(topAfterScroll.dy, equals(0.0));
50
  }, variant: TargetPlatformVariant.all(excluding: <TargetPlatform>{ TargetPlatform.fuchsia }));
51

Dan Field's avatar
Dan Field committed
52
  testWidgets('FlexibleSpaceBar collapse mode pin', (WidgetTester tester) async {
53
    await tester.pumpWidget(
54
      MaterialApp(
Dan Field's avatar
Dan Field committed
55
        theme: ThemeData(platform: debugDefaultTargetPlatformOverride),
56 57
        home: Scaffold(
          body: CustomScrollView(
58 59
            key: blockKey,
            slivers: <Widget>[
60
              SliverAppBar(
61 62
                expandedHeight: expandedAppbarHeight,
                pinned: true,
63 64
                flexibleSpace: FlexibleSpaceBar(
                  background: Container(
65 66 67 68 69
                    key: appbarContainerKey,
                  ),
                  collapseMode: CollapseMode.pin,
                ),
              ),
70 71
              SliverToBoxAdapter(
                child: Container(
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
                  height: 10000.0,
                ),
              ),
            ],
          ),
        ),
      ),
    );

    final Finder appbarContainer = find.byKey(appbarContainerKey);
    final Offset topBeforeScroll = tester.getTopLeft(appbarContainer);
    await slowDrag(tester, blockKey, const Offset(0.0, -100.0));
    final Offset topAfterScroll = tester.getTopLeft(appbarContainer);

    expect(topBeforeScroll.dy, equals(0.0));
    expect(topAfterScroll.dy, equals(-100.0));
88
  }, variant: TargetPlatformVariant.all(excluding: <TargetPlatform>{ TargetPlatform.fuchsia }));
89

Dan Field's avatar
Dan Field committed
90
  testWidgets('FlexibleSpaceBar collapse mode parallax', (WidgetTester tester) async {
91
    await tester.pumpWidget(
92
      MaterialApp(
Dan Field's avatar
Dan Field committed
93
        theme: ThemeData(platform: debugDefaultTargetPlatformOverride),
94 95
        home: Scaffold(
          body: CustomScrollView(
96 97
            key: blockKey,
            slivers: <Widget>[
98
              SliverAppBar(
99 100
                expandedHeight: expandedAppbarHeight,
                pinned: true,
101 102
                flexibleSpace: FlexibleSpaceBar(
                  background: Container(
103 104 105 106
                    key: appbarContainerKey,
                  ),
                ),
              ),
107 108
              SliverToBoxAdapter(
                child: Container(
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
                  height: 10000.0,
                ),
              ),
            ],
          ),
        ),
      ),
    );

    final Finder appbarContainer = find.byKey(appbarContainerKey);
    final Offset topBeforeScroll = tester.getTopLeft(appbarContainer);
    await slowDrag(tester, blockKey, const Offset(0.0, -100.0));
    final Offset topAfterScroll = tester.getTopLeft(appbarContainer);

    expect(topBeforeScroll.dy, equals(0.0));
    expect(topAfterScroll.dy, lessThan(10.0));
    expect(topAfterScroll.dy, greaterThan(-50.0));
126
  }, variant: TargetPlatformVariant.all(excluding: <TargetPlatform>{ TargetPlatform.fuchsia }));
127 128
}

129
Future<void> slowDrag(WidgetTester tester, Key widget, Offset offset) async {
130 131 132 133 134
  final Offset target = tester.getCenter(find.byKey(widget));
  final TestGesture gesture = await tester.startGesture(target);
  await gesture.moveBy(offset);
  await tester.pump(const Duration(milliseconds: 10));
  await gesture.up();
135
}