getRelativeOffset method
- required SizedConstraints sizedConstraints,
- required int index,
- required double ratio,
index's offset would be relative to the previous index's offset
currently, each action item is laid out using a tight BoxConstraints
so SizedConstraints.getShiftFromConstraints is used to get the size of the previous action item
for ActionMotion.stretch and ActionMotion.drawer, the previous action item's size is multiplied by ratio,
which is changed by the SlideController.animationValue
for ActionMotion.behind, action items' origin do not change during animation,
for ActionMotion.scroll, action items' origin are translated during animation
! different ActionPosition would translate differently based on its ActionMotion e.g. the translation is same for ActionPosition.pre/ActionMotion.scroll and ActionPosition.post/ActionMotion.behind
todo: to position action items based on its ActionMotion and ActionPosition when expanding
Implementation
Offset getRelativeOffset({
required SizedConstraints sizedConstraints,
required int index,
required double ratio,
}) {
assert(ratio >= 0 && ratio <= 1);
final shift = _previousShift;
switch (motion) {
case ActionMotion.stretch || ActionMotion.drawer:
_previousShift +=
sizedConstraints.getShiftFromConstraints(index) * ratio;
break;
case ActionMotion.behind || ActionMotion.scroll:
_previousShift += sizedConstraints.getShiftFromConstraints(index);
break;
}
final shouldChangeOrigin =
(motion == ActionMotion.scroll && position == ActionPosition.pre) ||
(motion == ActionMotion.behind && position == ActionPosition.post);
return shift +
(shouldChangeOrigin
? sizedConstraints.totalShift * (ratio - 1)
: Offset.zero);
}