positionForState method

double positionForState(
  1. GlassSheetState state,
  2. double screenHeight
)

Like positionFor but applies cascade constraints so snap positions are always ordered: hidden ≤ peek ≤ half ≤ full.

Implementation

double positionForState(GlassSheetState state, double screenHeight) {
  final hiddenPos = positionFor(GlassSheetState.hidden, screenHeight,
      mode: mode, halfSize: halfSize, fullSize: fullSize, peekSize: peekSize);
  final peekPos = positionFor(GlassSheetState.peek, screenHeight,
      mode: mode, halfSize: halfSize, fullSize: fullSize, peekSize: peekSize);
  final halfPos = positionFor(GlassSheetState.half, screenHeight,
      mode: mode, halfSize: halfSize, fullSize: fullSize, peekSize: peekSize);
  final fullPos = positionFor(GlassSheetState.full, screenHeight,
      mode: mode, halfSize: halfSize, fullSize: fullSize, peekSize: peekSize);

  // Cascade constraint: ensure order hidden <= peek <= half <= full
  final safePeek = peekPos.clamp(hiddenPos, 1.0);
  final safeHalf = halfPos.clamp(safePeek, 1.0);
  final safeFull = fullPos.clamp(safeHalf, 1.0);

  switch (state) {
    case GlassSheetState.hidden:
      return hiddenPos;
    case GlassSheetState.peek:
      return safePeek;
    case GlassSheetState.half:
      return safeHalf;
    case GlassSheetState.full:
      return safeFull;
  }
}