检查清单
描述
Linux 桌面版(AppImage)的窗口无法通过鼠标拖拽边框或标题栏来调整大小。经代码审查发现,主窗口在初始化时强制设置了 TitleBarStyle.hidden,导致系统原生标题栏和边框被完全隐藏,用户无法获得窗口调整大小的拖拽手柄。
此外,虽然代码中设置了最小尺寸限制(Size(360, 640)),但并未设置最大尺寸限制,说明窗口调整大小的功能原本是设计为可用的,只是标题栏被隐藏后,用户找不到操作入口。
复现步骤
- 在 Linux 系统上下载并运行 AppImage 包(版本 3.9.0+257)
- 观察应用主窗口:没有系统标题栏和边框
- 尝试将鼠标移动到窗口边缘或角落
- 鼠标指针不会变为调整大小的双向箭头
- 无法通过任何鼠标操作调整窗口大小
预期行为
用户应能够通过拖拽窗口边缘或右下角来自由调整窗口大小,以适应不同的屏幕尺寸和使用场景。
实际行为
窗口完全无法通过鼠标调整大小,窗口被锁定在固定尺寸(首次启动为 360x640),用户只能通过应用内部的布局适配来应对不同屏幕,体验受限。
环境
- 操作系统: Ubuntu 24.04 LTS / Ubuntu 26.04 LTS / CachyOS
- 应用版本: 3.9.0+257 (AppImage)
- 分支: v3
- 桌面环境: GNOME 46 / 50 (Wayland)
其他上下文
代码位置
问题出现在 main.dart 的主窗口初始化部分:
WindowOptions windowOptions = WindowOptions(
size: initialSize,
center: true,
backgroundColor: Colors.transparent,
skipTaskbar: false,
titleBarStyle: TitleBarStyle.hidden, // ⬅️ 问题根源
windowButtonVisibility: true,
);
并且在 windowManager.waitUntilReadyToShow 回调中,只调用了 setMinimumSize,没有调用 setResizable(true):
await windowManager.setMinimumSize(defaultSize);
await windowManager.show();
await windowManager.focus();
建议修复方案
方案一:恢复系统原生标题栏
将 TitleBarStyle.hidden 改为 TitleBarStyle.normal,用户即可获得完整的系统标题栏和边框,可以通过标准的窗口管理操作调整大小:
WindowOptions windowOptions = WindowOptions(
size: initialSize,
center: true,
backgroundColor: Colors.transparent,
skipTaskbar: false,
titleBarStyle: TitleBarStyle.normal, // 改为 normal
windowButtonVisibility: true,
);
方案二:保留自定义标题栏,同时启用窗口调整
如果不希望丢失自定义标题栏设计,可以在 windowManager.waitUntilReadyToShow 中显式启用调整大小:
windowManager.waitUntilReadyToShow(windowOptions, () async {
// ... 现有代码
await windowManager.setMinimumSize(defaultSize);
await windowManager.show();
await windowManager.focus();
// ⬇️ 新增:启用窗口调整
await windowManager.setResizable(true);
// ... 后续代码
});
Why this matters
- 固定窗口大小体验不佳
- Solian在其他桌面平台(如 Windows)上虽然也使用了自定义标题栏,但通常默认启用了
setResizable(true),Linux 版本缺少了这一步
This issue text is supercharged by DeepSeek
检查清单
描述
Linux 桌面版(AppImage)的窗口无法通过鼠标拖拽边框或标题栏来调整大小。经代码审查发现,主窗口在初始化时强制设置了
TitleBarStyle.hidden,导致系统原生标题栏和边框被完全隐藏,用户无法获得窗口调整大小的拖拽手柄。此外,虽然代码中设置了最小尺寸限制(
Size(360, 640)),但并未设置最大尺寸限制,说明窗口调整大小的功能原本是设计为可用的,只是标题栏被隐藏后,用户找不到操作入口。复现步骤
预期行为
用户应能够通过拖拽窗口边缘或右下角来自由调整窗口大小,以适应不同的屏幕尺寸和使用场景。
实际行为
窗口完全无法通过鼠标调整大小,窗口被锁定在固定尺寸(首次启动为 360x640),用户只能通过应用内部的布局适配来应对不同屏幕,体验受限。
环境
其他上下文
代码位置
问题出现在
main.dart的主窗口初始化部分:并且在
windowManager.waitUntilReadyToShow回调中,只调用了setMinimumSize,没有调用setResizable(true):建议修复方案
方案一:恢复系统原生标题栏
将
TitleBarStyle.hidden改为TitleBarStyle.normal,用户即可获得完整的系统标题栏和边框,可以通过标准的窗口管理操作调整大小:方案二:保留自定义标题栏,同时启用窗口调整
如果不希望丢失自定义标题栏设计,可以在
windowManager.waitUntilReadyToShow中显式启用调整大小:Why this matters
setResizable(true),Linux 版本缺少了这一步This issue text is supercharged by DeepSeek