Repository: flutter
Issue: ListView parameter to keep rendered children alive
Labels: c: new feature,framework,f: scrolling,P3,team-framework,triaged-framework

<!-- Thank you for using Flutter!

     If you are looking for support, please check out our documentation
     or consider asking a question on Stack Overflow:
      * https://flutter.dev/
      * https://api.flutter.dev/
      * https://stackoverflow.com/questions/tagged/flutter?sort=frequent

     If you have found a bug or if our documentation doesn't have an answer
     to what you're looking for, then fill our the template below. Please read
     our guide to filing a bug first: https://flutter.dev/docs/resources/bug-reports
-->

## Use case
There is a problem other developers and I have encountered: scrolling **up** in a `ListView` or `ScrollView` with async children (`FutureBuilder` or `StreamBuilder`) causes "jerking" or "snapping" to occur. This is because flutter disposes of child elements that are out of view. For my use case, I know my list will never be long enough to require this type of virtual scrolling. To prevent this "jerking" ux, I'd like to not dispose of rendered children.

Others facing this issue:
- https://stackoverflow.com/a/57984979/3969602
- https://github.com/flutter/flutter/issues/27611
- https://medium.com/saugo360/flutter-creating-a-listview-that-loads-one-page-at-a-time-c5c91b6fabd3#a358

Right now, it seems the solution to this problem is to have all the children implement the [`AutomaticKeepAliveClientMixin`](https://api.flutter.dev/flutter/widgets/AutomaticKeepAliveClientMixin-mixin.html), but it is unclear how to do this with stateless widgets.
<!--
     Please tell us the problem you are running into that led to you wanting
     a new feature.

     Is your feature request related to a problem? Please give a clear and
     concise description of what the problem is.

     Describe alternative solutions you've considered. Is there a package
     on pub.dev/flutter that already solves this?
-->

## Proposal
I'd like a simple fix parameter to pass into `ListView`, say `keepChildrenAlive`. This will modify the virtual scrolling behavior such that once child widgets have been rendered, the `ListView` will keep them around even once the user has scrolled past them. Keeping them around will prevent this "jerking" or "snapping" behavior when the user scrolls back up and will be a simple developer experience to implement even with stateless child widgets:

```dart
Scaffold(
  body: ListView(
    keepChildrenAlive: true, // new parameter
    children: [
      futureBuilderChild(bloc),
      displayError(bloc),
      streamBuilderChild(bloc),
      gridViewBuiltFromStream(bloc)
    ]
  )
);
```
<!--
     Briefly but precisely describe what you would like Flutter to be able to do.

     Consider attaching images showing what you are imagining.

     Does this have to be provided by Flutter directly, or can it be provided
     by a package on pub.dev/flutter? If so, maybe consider implementing and
     publishing such a package rather than filing a bug.
-->
### Considerations
`ListView` already has a parameter `bool addAutomaticKeepAlives = true`. We should make sure the difference between this and the new parameter is clear just from reading the variable names.