getFlipSlideDeltaNid method
Internal-use-only: FLIP-only Y slide delta for the live nid,
EXCLUDING any held make-room preview offset. 0.0 when no FLIP slide
is in flight for nid.
GHOST-LIFECYCLE READ. Not for painted positions: painted position is
structural + FLIP + preview, which is getSlideDeltaNid, and every
paint, hit-test, snapshot and overreach site must keep using that.
This exists for the one question that is genuinely FLIP-only:
whether a ghost, EDGE or EXIT, still has a slide to animate. Both
kinds are artifacts of a FLIP slide, the edge ghosts in
_ghost_registry.dart and the exit ghosts in RenderSliverTree's
_ExitGhost records, so a ghost whose FLIP delta has reached zero
is settled and must retire even while a preview holds a non-zero
offset on the same row. Reading the composed delta there retained
ghosts for the whole of a drag, which forced every drop-target
lookup onto the O(N) full scan
(RenderSliverTree.findRowAtPaintedY).
Its sibling getHeldPreviewDeltaNid answers the complementary
question and is NOT a competing lifecycle read: an exit ghost
converges on its anchor's SETTLED position, which under a held
preview is structural + preview, so that one site SPLITS the
composed delta rather than choosing a half of it. The identity
getSlideDeltaNid == getFlipSlideDeltaNid + getHeldPreviewDeltaNid
is what keeps the two halves from drifting.
No X counterpart is needed: getSlideDeltaXNid is already FLIP-only because previews are Y offsets.
Implementation
double getFlipSlideDeltaNid(int nid) => _slide.deltaForNid(nid);