validateAndCorrectButtonPosition method
void
validateAndCorrectButtonPosition()
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);
}
}