Repository: flutter
Issue: Create a SuperListView that allows most of the features of the native Android RecyclerView
Labels: c: new feature,framework,f: scrolling,c: proposal,P3,team-framework,triaged-framework

I'm currently migrating a music app from native Android to Flutter, and I'm struggling with a basic concept: Lists.

What I've found so far is that we have:

- `ListView` (including `ListView.builder`, `ListView.separated`...)
- `AnimatedList`
- `ReorderableListView`

What I don't understand is: why isn't there any widget that does all of that at the same time?

Also, on a side note, the `ReorderableListView` performances are very poor when it comes to drag & dropping an item in a long list of items (2000+ items, for example).

## Use case

In my app, like quite a few apps actually, I want my users to be able to:

- scroll a long list of items without performance issue
- drag & drop items, again in a long list of items without performance issue
- swipe items to the left / right with some custom behavior
- see an animation on added / updated / removed items

all of that in the _**same list**_.

A good example of what I expect can be found [here](https://pub.dev/packages/implicitly_animated_reorderable_list/versions/0.4.0-dev+3).

Unfortunately, it doesn't provide everything I expect in the following section, and it has some small bugs.
Also, even if such libraries exist, lists are a fundamental concept and should benefit from a much better implementation in Flutter.

## Proposal

I suggest that you create a `SuperListView` that can be a sort of a clone of the native Android combo: `RecyclerView` + `ListAdapter` + `ItemTouchHelper` + `ItemDecoration`, and that could pick up ideas from [that library](https://pub.dev/packages/implicitly_animated_reorderable_list/versions/0.4.0-dev+3), that allows the following:

- just like `ListView.builder()`, I want to dynamically build each item for better performances when it comes to long lists,
- just like `ListView.divider()`, I want to be able to add dividers in an easy way,
- I also want to simply be able to add a header and a footer, at least for design purposes (nice margins), as it is done in the mentioned library,
- just like the mentioned library, but also `ListAdapter`, I want to be able to add / update / remove item(s) by simply calling `setState(() => myDataList = myNewDataList)` or something, and that the ListView automatically does the diff (so it doesn't update / redraw the unchanged items for better performances),
- when one or multiple item(s) is(are) added / updated / removed, I need a custom animation for each item, just like the mentioned library (unfortunately, it doesn't work for updated items), but also `ListAdapter`,
- I also want to be able to drag & drop an item, without the performances issues we can find in `ReorderableListView`, as it is very well done in the mentioned library,
- I also want to be able to swipe to the left / right an item, with a custom action, as we can get with the `RecyclerView` and the `ItemTouchHelper`,
- I also want to limit drag & drop and swipe for some items, as it is possible with the `RecyclerView` and the `ItemTouchHelper` (in my case, I just need that the `n` first items are not draggable and also that the user can't move an item between or before those `n` first items, even though I need those items to be still part of the list and not in some header or something),
- finally, I also need each item to not be visible before there are rendered, for a better implementation of lazy loading, even if the list displays local data (another problem I have with the mentioned library).

Again, this feature is crucial, since lists are such a pain in Flutter when it comes to just a little bit more advanced use cases, as I mentioned here.