Repository: flutter
Issue: [Feature Request] Create CustomScrollView.padding to use padding over SliverFillRemaining
Labels: c: new feature,framework,f: scrolling,c: proposal,P3,team-framework,triaged-framework

### Use case

SliverFillRemaining inside CustomScrollView only check previous used space making usage of SliverPadding above not working as expected.

I would like to use CustomScrollView **padding** property to change the constraints of all sub slivers to make my SliverFillRemaining widget well processing the remaining space.

Example : 

Take two lists, both are the same, one is empty and must fit the entire screen height (the red one) and the other one is filled (the green one). Both must have padding. So, the red list should not be scrollable.

On the following demo, the first list is scrollable because the SliverFillRemaining didn't know that a bottom padding is after him. The second list work as expected.

**Video:**

[Screen_recording_20241102_003439.webm](https://github.com/user-attachments/assets/0334abd1-53b5-4eb5-a858-18752fe46a7c)


**Code example:**
<details> 

<summary> Expand here </summary>

```dart
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      scrollBehavior: const MaterialScrollBehavior().copyWith(
        overscroll: false,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: const Text("Demo"),
        ),
        body: const Row(
          children: [
            Expanded(
              child: CustomScrollView(
                slivers: [
                  SliverPadding(
                    padding: EdgeInsets.all(16),
                    sliver: HardCodedListWidget(id: 1),
                  ),
                ],
              ),
            ),
            Expanded(
              child: CustomScrollView(
                slivers: [
                  SliverPadding(
                    padding: EdgeInsets.all(16),
                    sliver: HardCodedListWidget(id: 2),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Future<List<Object>> fetch(int id) async => switch (id) {
      2 => List.generate(10, (index) => index),
      _ => [],
    };

class HardCodedListWidget extends StatefulWidget {
  const HardCodedListWidget({required this.id, super.key});

  final int id;

  @override
  State<HardCodedListWidget> createState() => _HardCodedListWidgetState();
}

class _HardCodedListWidgetState extends State<HardCodedListWidget> {
  List<Object>? items;

  @override
  void initState() {
    fetch(widget.id).then(
      (result) => setState(() => items = result),
    );
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    if (items == null) {
      return const SliverToBoxAdapter(
        child: SizedBox(),
      );
    }
    if (items!.isEmpty) {
      return SliverFillRemaining(
        hasScrollBody: false,
        child: Container(
          color: Colors.red,
        ),
      );
    }

    return SliverList.separated(
      itemCount: items!.length,
      separatorBuilder: (context, index) => const SizedBox(height: 16),
      itemBuilder: (context, index) => Container(
        color: Colors.green,
        height: 100,
      ),
    );
  }
}
```

</details>

### Proposal

Create CustomScrollView.padding as for ListView, SingleChildScrollView and GridView.