* Fine-tune iOS's scroll start feel
* remove negations in doc
* Our own dart-side gesture arena also contributes to the 'jerk'. Make sure that snap is accounted as well.
* Added more code comments from review.
* Record original pointer event timestamp
* review
* review
* review
* Matched motions with iOS. Didn’t add overscroll spring clamps and fix tests yet.
* clamp max overscroll transfer
* Add test
* review notes, moved things around
* remove function passing indirection
* review
* Replace stopwatch with timestamp from #11988
* move static
* Review
Fixes https://github.com/flutter/flutter/issues/8476
More detailed list of changes in this patch:
* Replaced the didTouch special logic with more generic logic that
uses Activities instead. Now instead when you tap down the
Scrollable calls `hold()` which begins a HoldScrollActivity which is
a hybrid of DragStartDetails and IdleScrollActivity and can be
canceled. When you let go, it gets canceled and that goes ballistic.
* Make DragGestureRecognizer more aggressive about grabbing pointers,
otherwise a second pointer in a situation with competing horizontal
and vertical recognizers always gets taken by the other one.
* Fixed the _GestureSemantics widget to call the "down" callbacks so
that it follows the same pattern as "real" interactions.
* Added tests for the above.
* Added a hashCode to ScrollActivity.toString (and subclasses).
* Added a toString to ScrollDragController, and include it in
DragScrollActivity's toString.
* s/coorindator/coordinator/
* Add a comment in DragStartDetails to distinguish it from the
otherwise identical DragDownDetails, so we're not tempted to merge
them.
Also, move the creation of the ScrollPosition to ScrollController.
Finally, remove TestScrollable in favor of CustomScrollView, which is the
production version of this widget.
This patch makes a number of changes to how you can configure a
Scrollable2:
- The ScrollPhysics is now responsible for creating the ScrollPosition.
You can override the ScrollPhysics by supplying a `physics` argument
to `Scrollable`, and the new physics you supply will be applied to
the default physics inherited from the ScrollBehavior.
- This patch removes the ScrollPosition/AbsoluteScrollPosition split as
all clients were operating in pixels anyway and the split made the
code very difficult to follow.
- ScrollPosition no longer depends directly on Scrollable2State.
Instead, it depends on an abstract interface that Scrollable2State
implements. This change has two benefits:
a) It removes the circular dependency between ScrollPosition and
Scrollable2State, which lets us split the code for these classes
(and several other classes that got wrapped up in that cycle) into
separate libraries for easier maintenance.
b) ScrollPosition is no longer bound to Scrollable2, which means you
could use the behavior machinery to drive other sorts of widgets.
For example, we could use it to drive Scrollabe1 if we wanted.