Skip to content

[Bug] Linux 桌面版客户端窗口无法调整大小 #384

Description

@BluewhaleYF

检查清单

  • 搜索现有 issues 以避免重复
  • 确认该问题在最新提交中仍然存在
  • 确认该问题不是由配置问题或第三方修改版本引起的

描述

Linux 桌面版(AppImage)的窗口无法通过鼠标拖拽边框或标题栏来调整大小。经代码审查发现,主窗口在初始化时强制设置了 TitleBarStyle.hidden,导致系统原生标题栏和边框被完全隐藏,用户无法获得窗口调整大小的拖拽手柄。

此外,虽然代码中设置了最小尺寸限制(Size(360, 640)),但并未设置最大尺寸限制,说明窗口调整大小的功能原本是设计为可用的,只是标题栏被隐藏后,用户找不到操作入口。

复现步骤

  1. 在 Linux 系统上下载并运行 AppImage 包(版本 3.9.0+257)
  2. 观察应用主窗口:没有系统标题栏和边框
  3. 尝试将鼠标移动到窗口边缘或角落
  4. 鼠标指针不会变为调整大小的双向箭头
  5. 无法通过任何鼠标操作调整窗口大小

预期行为

用户应能够通过拖拽窗口边缘或右下角来自由调整窗口大小,以适应不同的屏幕尺寸和使用场景。

实际行为

窗口完全无法通过鼠标调整大小,窗口被锁定在固定尺寸(首次启动为 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions