enableSimpleEdgeDocking static method
简化版边缘停靠功能(基于窗口焦点事件)
edge 要停靠到的边缘位置
visibleWidth 停靠时可见的窗口宽度(像素),默认为5像素
返回 true 表示启用成功,false 表示启用失败
此版本使用窗口焦点事件来控制显示/隐藏,更简单但功能略有限制
Implementation
static Future<bool> enableSimpleEdgeDocking({
required WindowEdge edge,
double visibleWidth = 5.0,
}) async {
if (!MyPlatform.isDesktop) return false;
try {
final display = await screenRetriever.getPrimaryDisplay();
if (display.visiblePosition == null || display.visibleSize == null) {
return false;
}
final windowSize = await windowManager.getSize();
final workArea = display.visibleSize!;
final workAreaPosition = display.visiblePosition!;
// 计算停靠位置
Offset dockPosition;
Offset expandPosition;
switch (edge) {
case WindowEdge.left:
dockPosition = Offset(
workAreaPosition.dx - windowSize.width + visibleWidth,
workAreaPosition.dy + (workArea.height - windowSize.height) / 2,
);
expandPosition = Offset(workAreaPosition.dx, dockPosition.dy);
break;
case WindowEdge.right:
dockPosition = Offset(
workAreaPosition.dx + workArea.width - visibleWidth,
workAreaPosition.dy + (workArea.height - windowSize.height) / 2,
);
expandPosition = Offset(
workAreaPosition.dx + workArea.width - windowSize.width,
dockPosition.dy,
);
break;
case WindowEdge.top:
dockPosition = Offset(
workAreaPosition.dx + (workArea.width - windowSize.width) / 2,
workAreaPosition.dy - windowSize.height + visibleWidth,
);
expandPosition = Offset(dockPosition.dx, workAreaPosition.dy);
break;
case WindowEdge.bottom:
dockPosition = Offset(
workAreaPosition.dx + (workArea.width - windowSize.width) / 2,
workAreaPosition.dy + workArea.height - visibleWidth,
);
expandPosition = Offset(
dockPosition.dx,
workAreaPosition.dy + workArea.height - windowSize.height,
);
break;
}
// 保存位置信息
_dockPosition = dockPosition;
_expandPosition = expandPosition;
_isEdgeDockingEnabled = true;
_isWindowExpanded = false;
// 移动窗口到停靠位置
await windowManager.setPosition(dockPosition);
return true;
} catch (e) {
XlyLogger.error('启用简单边缘停靠失败', e);
return false;
}
}