|
|
|
|
|
|
reverse: widget.reverse, |
|
|
|
physics: widget.physics != null |
|
|
|
? widget.physics.applyTo(new ClampingScrollPhysics()) |
|
|
|
: new ClampingScrollPhysics(), |
|
|
|
controller: _coordinator._outerController, |
|
|
|
slivers: widget._buildSlivers( |
|
|
|
_context, _coordinator._innerController, _lastHasScrolledBody |
|
|
|
), |
|
|
|
handle: _absorberHandle |
|
|
|
); |
|
|
|
: new ClampingScrollPhysics(), |
|
|
|
controller: _coordinator._outerController, |
|
|
|
slivers: widget._buildSlivers( |
|
|
|
context, |
|
|
|
_coordinator._innerController, |
|
|
|
_lastHasScrolledBody |
|
|
|
), |
|
|
|
handle: _absorberHandle |
|
|
|
); |
|
|
|
} |
|
|
|
) |
|
|
|
); |
|
|
|
|
|
|
class _NestedScrollViewCustomScrollView : CustomScrollView { |
|
|
|
public _NestedScrollViewCustomScrollView( |
|
|
|
Axis scrollDirection, |
|
|
|
bool reverse, |
|
|
|
Axis scrollDirection, |
|
|
|
bool reverse , |
|
|
|
ScrollPhysics physics, |
|
|
|
ScrollController controller, |
|
|
|
List<Widget> slivers, |
|
|
|
|
|
|
if (!_outerController.hasClients) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
return _outerController.nestedPositions.Single(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
ScrollDirection _userScrollDirection = ScrollDirection.idle; |
|
|
|
|
|
|
|
public void updateUserScrollDirection(ScrollDirection value) { |
|
|
|
D.assert(value != null); |
|
|
|
if (userScrollDirection == value) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public void goBallistic(float velocity) { |
|
|
|
beginActivity(createOuterBallisticScrollActivity(velocity), |
|
|
|
beginActivity( |
|
|
|
createOuterBallisticScrollActivity(velocity), |
|
|
|
(_NestedScrollPosition position) => createInnerBallisticScrollActivity(position, velocity) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
_outerPosition.updateCanDrag(maxInnerExtent); |
|
|
|
} |
|
|
|
|
|
|
|
public Future animateTo(float to, |
|
|
|
TimeSpan duration, |
|
|
|
Curve curve |
|
|
|
public Future animateTo( |
|
|
|
float to, |
|
|
|
TimeSpan? duration = null, |
|
|
|
Curve curve = null |
|
|
|
duration, |
|
|
|
duration ?? new TimeSpan(0,0,0,0), |
|
|
|
curve |
|
|
|
); |
|
|
|
List<Future> resultFutures = new List<Future> {outerActivity.done}; |
|
|
|
|
|
|
DrivenScrollActivity innerActivity = position.createDrivenScrollActivity( |
|
|
|
nestOffset(to, position), |
|
|
|
duration, |
|
|
|
duration ?? new TimeSpan(0,0,0,0), |
|
|
|
curve |
|
|
|
); |
|
|
|
resultFutures.Add(innerActivity.done); |
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public override string ToString() { |
|
|
|
return "$GetType()(outer=$_outerController; inner=$_innerController)"; |
|
|
|
return $"{GetType()}(outer={_outerController}; inner={_innerController})"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|