Repository: flutter
Issue: CustomScrollView systematically initializes the first child of every SliverList/SliverGrid sliver
Labels: framework,f: scrolling,d: api docs,has reproducible steps,P3,found in release: 3.7,found in release: 3.9,team-framework,triaged-framework

Having a `CustomScrollView` with many slivers and stateful widgets inside these slivers, I noticed that the first child of each sliver is always initialized, even though they are way off screen (beyond the cache extent). It happens with `SliverGrid` as well as `SliverList`.

Reproduction:
```dart
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: CustomScrollView(
          slivers: List.generate(50, (i) => i)
              .map(
                (sliverIndex) => SliverList(
                  delegate: SliverChildBuilderDelegate(
                    (_, index) => Item('sliver $sliverIndex - item $index'),
                    childCount: 50,
                  ),
                ),
              )
              .toList(),
        ),
      ),
    );
  }
}

class Item extends StatefulWidget {
  final String id;

  const Item(this.id);

  @override
  _ItemState createState() => _ItemState();
}

class _ItemState extends State<Item> {
  @override
  void initState() {
    super.initState();
    debugPrint('$runtimeType initState ${widget.id}');
  }

  @override
  void dispose() {
    debugPrint('$runtimeType dispose ${widget.id}');
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Text(widget.id);
  }
}
```

With this reproduction code, we can see from the first frame that all the children appearing on screen get initialized (which is normal), but also all the first children of the 50 slivers (which is unnecessary). Following this initialization, everything works fine: children get initialized and disposed  as we scroll, as expected.

Please note that I'm not talking about superfluous widget rebuilding. Here the issue is that `initState` is called for widgets where it is not necessary. This is a problem if initialization involves networking, platform call or other slightly heavy stuff.

(edit) flutter doctor:
```
[√] Flutter (Channel dev, v1.14.0, on Microsoft Windows [Version 10.0.18363.535], locale en-GB)
    • Flutter version 1.14.0 at C:\flutter
    • Framework revision bc6f270c58 (3 days ago), 2020-01-14 13:23:03 -0800
    • Engine revision fd269f60bf
    • Dart version 2.8.0 (build 2.8.0-dev.0.0 28c335d5a2)


[√] Android toolchain - develop for Android devices (Android SDK version 29.0.0)
    • Android SDK at C:\Users\tibo\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_202-release-1483-b03)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[√] Android Studio (version 3.5)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 42.1.1
    • Dart plugin version 191.8593
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b03)

[√] Connected device (3 available)
    • SM G970N   • R39M4001Z1M • android-arm64  • Android 10 (API 29)
    • Chrome     • chrome      • web-javascript • Google Chrome 79.0.3945.117
    • Web Server • web-server  • web-javascript • Flutter Tools

• No issues found!
```