Repository: flutter
Issue: PageController nextPage multiple calls
Labels: framework,a: animation,f: scrolling,has reproducible steps,P2,found in release: 2.2,found in release: 2.4,team-framework,triaged-framework

If PageController.nextPage() is called multiple times before the first call was due to complete it causes an unexpected animation and the final page in view is not what was expected.

For example, if nextPage is exposed to the user through a button and the user presses the button twice in short succession then I would expect the PageView to skip on two pages however, what we see is a stuttering of the animation and the view moves on only 1 page.

### Example
![nextpage_issue](https://user-images.githubusercontent.com/3890956/64473912-a663bd80-d164-11e9-9fb0-c0d9cefa67a9.gif)

### Steps to Reproduce
```dart
import 'package:flutter/material.dart';

void main() => runApp(MyPageView());

class MyPageView extends StatefulWidget {
  MyPageView({Key key}) : super(key: key);

  _MyPageViewState createState() => _MyPageViewState();
}

class _MyPageViewState extends State<MyPageView> {
  PageController _pageController;

  @override
  void initState() {
    super.initState();
    _pageController = PageController();
  }

  @override
  void dispose() {
    _pageController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
          child: Column(
            mainAxisSize:  MainAxisSize.max,
            children:[ Container(
              width: 300,
              height: 300,
              child: PageView(
                controller: _pageController,
                children: [
                  Container( color: Colors.red),
                  Container( color: Colors.grey),
                  Container( color: Colors.blue),
                  Container( color: Colors.yellow),
                  Container( color: Colors.black),
                  Container( color: Colors.blue),
                  Container( color: Colors.white),
                  Container( color: Colors.purple),
                  Container( color: Colors.red),
                  Container( color: Colors.grey),
                  Container( color: Colors.blue),
                  Container( color: Colors.yellow),
                  Container( color: Colors.black),
                  Container( color: Colors.blue),
                  Container( color: Colors.white),
                  Container( color: Colors.purple),
                ],
                ),
            ),

              RaisedButton(
                color: Colors.white,
                onPressed: () {
                  if (_pageController.hasClients) {
                    _pageController.nextPage(
                      duration: const Duration(milliseconds: 500),
                      curve: Curves.easeInOut,
                      );
                  }
                },
                child: Text('Next'),
                ),
              RaisedButton(
                color: Colors.white,
                onPressed: () {
                  if (_pageController.hasClients) {
                    _pageController.previousPage(
                      duration: const Duration(milliseconds: 500),
                      curve: Curves.easeInOut,
                      );
                  }
                },
                child: Text('Previous'),
                ),
            ]
          ),
        ),
        ),
      );
  }
}
```

### flutter doctor -v
```
[√] Flutter (Channel beta, v1.8.3, on Microsoft Windows [Version 10.0.18362.295], locale en-IE)
    • Flutter version 1.8.3 at C:\android\flutter
    • Framework revision e4ebcdf6f4 (6 weeks ago), 2019-07-27 11:48:24 -0700
    • Engine revision 38ac5f30a7
    • Dart version 2.5.0 (build 2.5.0-dev.1.0 0ca1582afd)


[√] Android toolchain - develop for Android devices (Android SDK version 29.0.0)
    • Android SDK at C:\Users\Ger\AppData\Local\Android\sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-29, build-tools 29.0.0
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
    • All Android licenses accepted.

[√] Android Studio (version 3.4)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 37.0.1
    • Dart plugin version 183.6270
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)

[√] VS Code (version 1.37.1)
    • VS Code at C:\Users\Ger\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.4.0

[√] Connected device (1 available)
    • Android SDK built for x86 • emulator-5556 • android-x86 • Android 5.1.1 (API 22) (emulator)

• No issues found!
```