Repository: flutter
Issue: Scrollable.ensureVisible doesn't work fine
Labels: framework,f: scrolling,has reproducible steps,P2,found in release: 3.7,found in release: 3.8,team-framework,triaged-framework

<details><summary>flutter doctor -v</summary>

```
[✓] Flutter (Channel stable, 1.22.1, on Mac OS X 10.15.5 19F101, locale
    zh-Hans-CN)
    • Flutter version 1.22.1 at /Users/limi/Desktop/flutter
    • Framework revision f30b7f4db9 (4 days ago), 2020-10-08 10:06:30 -0700
    • Engine revision 75bef9f6c8
    • Dart version 2.10.1
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn

 
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at /Users/limi/Library/Android/sdk
    • Platform android-29, build-tools 29.0.3
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6222593)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 12.0)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.0, Build version 12A7209
    • CocoaPods version 1.9.1

[✓] Android Studio (version 4.0)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 49.0.2
    • Dart plugin version 193.7547
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6222593)

[✓] Connected device (1 available)
    • iPhone 11 (mobile) • A7DF1221-DC45-4816-871B-8B879053EA80 • ios •
      com.apple.CoreSimulator.SimRuntime.iOS-14-0 (simulator)

• No issues found!
```
</details>

<details><summary>code</summary>

```
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      title: 'Flutter Demo',
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: CupertinoNavigationBar(middle: Text("Demo"), backgroundColor: Colors.blue,),
      child: Container(
        color: Colors.white,
        child: Column(
          children: [
            Expanded(
              child: PageView(
                children: List.generate(5, (index) => _Page(index)),
              ),
            )
          ],
        ),
      ),
    );
  }
}

class _Page extends StatefulWidget {
  final int index;
  _Page(this.index);

  @override
  State<StatefulWidget> createState() {
    return _PageState();
  }
}

class _PageState extends State<_Page> {

  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        Container(
          width: 100,
          color: Colors.grey[200],
        ),
        Expanded(
          child: Column(
            children: [
              Container(
                color: Colors.red,
                width: double.infinity,
                height: 50,
                child: Menu(),
              ),
              Expanded(
                child: Center(
                  child: Text('${widget.index}'),
                ),
              )
            ],
          ),
        )
      ],
    );
  }
}

class Menu extends StatefulWidget {

  @override
  State<StatefulWidget> createState() {
    return _MenuState();
  }
}

class _MenuState extends State<Menu> {

  Map<int, GlobalKey> keys = {};

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      child: Row(
        children: List.generate(10, (index) {
          var key = keys[index];
          if(key == null){
            key = GlobalKey();
            keys[index] = key;
          }
          return GestureDetector(
            key: key,
            onTap: () {
              Scrollable.ensureVisible(keys[index].currentContext, alignment: 0.5, duration: Duration(milliseconds: 200));
            },
            child: Container(
              color: Colors.grey,
              margin: EdgeInsets.only(left: 10, right: 10),
              padding: EdgeInsets.fromLTRB(10, 8, 10, 8),
              child: Text('item $index'),),
          );
        }),
      ),
    );
  }
}
```
</details>

**Reproduce steps:**
1. Click the item3 in menu, you will see the result.

**Expected results:** 
Only the Menu scroll.

**Actual results:**
The PageView and Menu scroll together.

if you remove the follow code in `_PageState`, it work fine.
```
  Container(
    width: 100,
    color: Colors.grey[200],
  ),
```