validateAndCorrectButtonPosition method

void validateAndCorrectButtonPosition(
  1. double buttonX,
  2. double buttonY,
  3. void onPositionCorrected(
    1. double,
    2. double
    )
)

Validates and corrects button position to ensure it stays within screen bounds

Implementation

void validateAndCorrectButtonPosition(
    double buttonX, double buttonY, void Function(double, double) onPositionCorrected) {
  if (!mounted) return;

  final screenSize = MediaQuery.of(context).size;
  final screenPadding = MediaQuery.of(context).padding;
  const double buttonSize = 56.0;
  const double margin = 16.0;

  // Calculate safe bounds (respect safe areas + margin from edges)
  final double minX = screenPadding.left + margin;
  final double minY = screenPadding.top + margin;
  final double maxX = screenSize.width - screenPadding.right - buttonSize - margin;
  final double maxY = screenSize.height - screenPadding.bottom - buttonSize - margin;

  bool needsCorrection = false;
  double correctedX = buttonX;
  double correctedY = buttonY;

  // Check if position is off-screen or too close to edges/system areas
  if (buttonX < minX || buttonX > maxX || buttonY < minY || buttonY > maxY) {
    needsCorrection = true;

    // Clamp to nearest safe position within bounds
    correctedX = buttonX.clamp(minX, maxX);
    correctedY = buttonY.clamp(minY, maxY);

    ObslyLogger.debug('Debug button position was out of safe bounds, clamped from '
        '($buttonX, $buttonY) to ($correctedX, $correctedY)');
  }

  if (needsCorrection) {
    onPositionCorrected(correctedX, correctedY);
  }
}