Repository: flutter
Issue: Multiple `SliverPersistentHeader` slivers do not size correctly when pinned
Labels: framework,f: material design,f: scrolling,has reproducible steps,P2,found in release: 2.5,found in release: 2.6,team-design,triaged-design

See in this example, the Placeholders content is allowed to pass underneath the Green area for 150pixels, before the green area actually begins to shrink. The Green and Red areas are both `SliverPersistentHeader(pinned: true)`

https://user-images.githubusercontent.com/736973/135920561-d92c4785-fec0-4b19-a057-85a7aa4dd512.mp4

The amount of overlap, seems to always equal to the minSize of the `SliverPersistentHeader`s that came before it. 

If you use more headers, the issue happens multiple times. Observe here as the content is scrolled underneath the pinned header in 2 steps: 

https://user-images.githubusercontent.com/736973/135921023-da828b19-4775-4213-a32c-568629c21cb2.mp4

<details>
<summary>code sample</summary>

```dart
class PersistentHeaderBugApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: CustomScrollView(
          slivers: [
            MySliver(
              min: 150,
              max: 200,
              builder: (_, size) => SizedBox.expand(
                  child: Container(alignment: Alignment.center, color: Colors.red, child: Text('$size'))),
            ),
            MySliver(
              min: 100,
              max: 200,
              builder: (_, size) => SizedBox.expand(
                  child: Container(alignment: Alignment.center, color: Colors.green, child: Text('$size'))),
            ),
            SliverToBoxAdapter(child: Placeholder(fallbackHeight: 100)),
            SliverToBoxAdapter(child: Placeholder(fallbackHeight: 100)),
            SliverToBoxAdapter(child: Placeholder(fallbackHeight: 100)),
            SliverToBoxAdapter(child: Placeholder(fallbackHeight: 1000)),
          ],
        ),
      ),
    );
  }
}

class MySliver extends StatelessWidget {
  const MySliver({Key? key, required this.min, required this.max, required this.builder}) : super(key: key);
  final double min;
  final double max;
  final Widget Function(BuildContext, int) builder;

  @override
  Widget build(BuildContext context) {
    return SliverPersistentHeader(
      pinned: true,
      delegate: _MySliverDelegate(this),
    );
  }
}

class _MySliverDelegate extends SliverPersistentHeaderDelegate {
  _MySliverDelegate(this.widget);
  final MySliver widget;

  @override
  Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {
    double shrinkAmt = max(widget.min, widget.max - shrinkOffset);
    return widget.builder(context, shrinkAmt.round());
  }

  @override
  double get maxExtent => widget.max;

  @override
  double get minExtent => widget.min;

  @override
  bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) => true;
}
```
</details>

```
[√] Flutter (Channel stable, 2.5.1, on Microsoft Windows [Version 10.0.19042.685], locale en-US)
    • Flutter version 2.5.1 at C:\_dev\sdks\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision ffb2ecea52 (2 weeks ago), 2021-09-17 15:26:33 -0400
    • Engine revision b3af521a05
    • Dart version 2.14.2
```