Flutter开发桌面应用

本文档详细介绍了如何配置Windows桌面应用程序的各项设置,包括调整屏幕大小、实现窗口居中、设置为置顶窗口、修改图标、创建后台程序、禁用最大化按钮等功能,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、开发windows桌面应用的一些配置:(注意.cpp文件里哪怕是注释都不能有中文,否则会报错,目前没有找到解决办法)

1.调整屏幕的大小:

将windows/runner里的main.cpp文件:Win32Window::Size size(1280, 720);改成想要的值即可,如Win32Window::Size size(360, 640);

2.启动后窗体居中:

这个步骤有点复杂,也是改windows/runner的main.cpp文件,将这两个代码

Win32Window::Point origin(10, 10);

Win32Window::Size size(360, 640);

改成: 

UINT windowWidth = 360, windowHeight = 640;
Win32Window::Size size(windowWidth, windowHeight);
UINT scrWidth, scrHeight, xShaft, yShaft;
scrWidth = GetSystemMetrics(SM_CXFULLSCREEN);
scrHeight = GetSystemMetrics(SM_CYFULLSCREEN);
xShaft = (scrWidth - windowWidth) / 2;
yShaft = (scrHeight - windowHeight) / 2;
// origin is used for set window location
Win32Window::Point origin(xShaft, yShaft);

然后将runner/win32_window.cpp的CreateWindow(..)方法下面添加

SetWindowPos(window, HWND_TOP, origin.x, origin.y, size.width, size.height, SWP_NOSIZE);

3.将窗体改成top窗口【类似截图pin在屏幕上的那种软件实现】

在runner/win32_window.cpp里的CreateWindow(..)方法下面添加一行代码:

SetWindowPos(window, HWND_TOPMOST, origin.x, origin.y, size.width, size.height, SWP_NOSIZE);

【注意,和上面的居中的是同一个代码,只不过HWND_TOP改成HWND_TOPMOST】

4.修改应用的图标可以修改runner/resources的app_icon.ico文件,注意改了后需要清理编译的临时文件【而且图标是要符合格式的图标文件】

5.创建一个不可显示的程序【即后台程序,但是又不是控制台程序】:

将CreateWindow里的 | WS_VISIBLE去掉【就是去掉WS_VISIBLE】,那么这个窗体程序就不显示了,也就变成了“后台程序”【不过似乎不实用】

6.禁用最大化窗口按钮【标题栏里的】(win32_window.cpp文件)

注意,在允许最大化窗体按钮的情况下,双击标题栏会最大化窗口,窗口可以拖动更改窗体大小,点击最大化按钮会最大化窗体;

但是如果禁用了最大化按钮,则双击标题栏不会最大化,且也不能拖动窗体边缘来修改窗体大小,禁用最大化按钮方式为修改CreateWindow的WS_OVERLAPPEDWINDOW,改为:

WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX

7.如果要去掉标题栏,则可以在win32_window.cpp里的SetWindowLongPtr(..)方法下面添加:

SetWindowLong(window, GWL_STYLE, WS_OVERLAPPED);

8.dart代码可以通过io的exit(0);来退出窗体程序;

9.如果不禁用最大化按钮,但是需要禁用双击标题栏最大化窗体,可以修改win32_window.cpp文件里的MessageHandler的switch里添加case是WM_NCLBUTTONDBLCLK: return 0;来实现“吃”掉双击标题栏的事件;

10.不禁用最大化按钮的前提下,不能拖动窗口边缘来改变窗体大小,可以在win32_window.cpp文件里的MessageHandler的switch里添加case是:

case WM_NCHITTEST:
      LRESULT res = DefWindowProc(hwnd, message, wparam, lparam);
      if (res == HTCAPTION || (res >= HTLEFT && res < HTBORDER)) {
        return HTCLIENT;
      }
      break;

来实现;

【还可以吃掉点击最大化按钮的事件,但是没有意义,还不如直接禁用,消息是WS_SYSCOMMAND然后再通过wparam判断是不是SC_MAXIMIZE来实现】

11.待做:dart里动态更新标题,托盘功能;

原文地址:https://www.cnblogs.com/silentdoer/p/15041143.html

### 使用 Flutter 进行桌面应用程序开发 #### 资源汇总 awesome-flutter-desktop 是一个精心策划的列表,汇集了与 Flutter 桌面开发相关的最佳资源、库、工具、教程和文章。这个项目旨在为开发者提供一站式资源集合,帮助他们快速上手并高效开发 Flutter 桌面应用[^1]。 #### 环境配置 要开始使用 Flutter 开发桌面应用,首先需要完成环境准备。这通常涉及安装 Flutter SDK 并设置必要的依赖项来支持目标操作系统(如 Windows, macOS 或 Linux)。一旦环境准备好,在模拟器或连接的设备上启动 Flutter 应用即可验证环境是否正常工作[^2]。 #### 创建多平台兼容的应用 借助 Flutter Desktop Embedding 技术,能够创建一个可以在多个桌面平台上无缝工作的应用。除了利用 Flutter 自带的强大 UI 组件外,还可以通过调用本地 API 实现特定于操作系统的高级特性。对于性能敏感的任务,则可以通过更好地控制内存和其他系统资源来进行优化处理。 #### 测试与调试技巧 针对桌面端特有的需求,采用合适的测试策略非常重要。比如,可以实施单元测试以及集成测试,并充分利用 IDE 支持的功能——像在 IntelliJ IDEA 中使用的 fluter-intellij 插件那样,它允许直接在此环境中编辑和运行项目。另外,Flutter 的热重载机制极大地提高了开发效率,使得代码更改几乎即时反映到正在运行的应用中。 #### 生态系统中的重要组件 一些常用的 Dart 库也适用于桌面场景,例如 `provider` 可用于状态管理和依赖注入;而 `http` 则提供了便捷的方式发起 HTTP 请求。这些库的存在让构建复杂逻辑变得更加容易。 #### 发布流程简介 当完成了应用开发之后,还需要考虑如何将其分发给最终用户。为此,可以借助类似 Flutter Distributor 这样的工具简化打包过程,并且如果涉及到自动更新的话,那么 auto_updater 就是一个不错的选择,它可以用来实现在 Windows 和 Mac 上的应用版本升级功能[^3]。 ```bash flutter pub add provider http ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值