slider_test.dart 2.65 KB
Newer Older
1 2 3 4 5 6 7 8 9
// Copyright 2016 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/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
10
  testWidgets('Slider can move when tapped', (WidgetTester tester) async {
11 12
    Key sliderKey = new UniqueKey();
    double value = 0.0;
13

14
    await tester.pumpWidget(
15 16 17 18 19 20 21 22 23 24 25 26
      new StatefulBuilder(
        builder: (BuildContext context, StateSetter setState) {
          return new Material(
            child: new Center(
              child: new Slider(
                key: sliderKey,
                value: value,
                onChanged: (double newValue) {
                  setState(() {
                    value = newValue;
                  });
                }
27
              )
28 29 30 31 32
            )
          );
        }
      )
    );
33

34
    expect(value, equals(0.0));
35
    await tester.tap(find.byKey(sliderKey));
36
    expect(value, equals(0.5));
37
    await tester.pump(); // No animation should start.
38
    expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
39 40
  });

41
  testWidgets('Slider take on discrete values', (WidgetTester tester) async {
42 43
    Key sliderKey = new UniqueKey();
    double value = 0.0;
44

45
    await tester.pumpWidget(
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
      new StatefulBuilder(
        builder: (BuildContext context, StateSetter setState) {
          return new Material(
            child: new Center(
              child: new Slider(
                key: sliderKey,
                min: 0.0,
                max: 100.0,
                divisions: 10,
                value: value,
                onChanged: (double newValue) {
                  setState(() {
                    value = newValue;
                  });
                }
61
              )
62 63 64 65 66
            )
          );
        }
      )
    );
67

68
    expect(value, equals(0.0));
69
    await tester.tap(find.byKey(sliderKey));
70
    expect(value, equals(50.0));
71
    await tester.scroll(find.byKey(sliderKey), const Offset(5.0, 0.0));
72
    expect(value, equals(50.0));
73
    await tester.scroll(find.byKey(sliderKey), const Offset(40.0, 0.0));
74
    expect(value, equals(80.0));
75

76
    await tester.pump(); // Starts animation.
77
    expect(SchedulerBinding.instance.transientCallbackCount, greaterThan(0));
78 79 80 81
    await tester.pump(const Duration(milliseconds: 200));
    await tester.pump(const Duration(milliseconds: 200));
    await tester.pump(const Duration(milliseconds: 200));
    await tester.pump(const Duration(milliseconds: 200));
82 83
    // Animation complete.
    expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
84 85
  });
}