Greg Price 47dd7639d2
Let DrivenScrollActivity subclasses customize handling of overscroll (#166731)
This functionality is useful in a custom DrivenScrollActivity subclass,
just like it's useful in a BallisticScrollActivity subclass.

For example, if one calls `animateTo(0, …)` to scroll to the beginning
of a list, there will be no overscroll (provided the chosen curve
doesn't go beyond its endpoint). The same is true if one calls
`animateTo(position.maxScrollExtent, …)` to scroll to the end... as long
as the value of maxScrollExtent at the beginning remains accurate when
the scroll view reaches the end. If one wants to scroll to the end and
avoid overscroll even when that turns out to be closer than the initial
estimate found in maxScrollExtent, then that calls for customizing the
overscroll behavior of a DrivenScrollActivity.

Fortunately we don't need to invent any new API in order to do this:
BallisticScrollActivity already has an API for the exact same need. So
copy that API -- name, docs, and all -- to keep these two classes
aligned.

(It might also be useful to take much of what these have in common and
factor that out to a common subclass; but that'd be for another PR.)

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-04-30 01:53:15 +00:00
..

Flutter

Flutter is a new way to build high-performance, cross-platform mobile, web, and desktop apps. Flutter is optimized for today's — and tomorrow's — mobile and desktop devices. We are focused on low-latency input and high frame rates on all platforms.

See the getting started guide for information about using Flutter.