snapToCorner method

void snapToCorner()

Snaps the floating widget to the nearest corner.

Implementation

void snapToCorner() {
  double dx = position.dx;
  double dy = position.dy;

  final corners = [
    Offset(padding, _mediaQuery.viewPadding.top + topMargin),
    Offset(
      screenSize.width - padding - _collapsedSize.width,
      _mediaQuery.viewPadding.top + topMargin,
    ),
    Offset(
      padding,
      screenSize.height -
          _collapsedSize.height -
          _mediaQuery.viewPadding.bottom -
          bottomMargin,
    ),
    Offset(
      screenSize.width - padding - _collapsedSize.width,
      screenSize.height -
          _collapsedSize.height -
          _mediaQuery.viewPadding.bottom -
          bottomMargin,
    ),
  ];

  final closestCorner = corners.reduce((a, b) {
    final distanceA = (a.dx - dx).abs() + (a.dy - dy).abs();
    final distanceB = (b.dx - dx).abs() + (b.dy - dy).abs();
    return distanceA < distanceB ? a : b;
  });

  _position = closestCorner;
  notifyListeners();
}