Flutter Windows应用如何设置最小/最大屏幕尺寸禁止用户调整窗口大小
实现方案
Flutter Windows本身没有内置窗口尺寸控制API,你可以通过两种方式实现固定窗口大小、禁止拖拽调整的需求:
方案一:使用window_manager第三方包(推荐)
这是目前Flutter桌面端窗口管理的主流通用方案,全Dart层实现,不需要修改原生代码,后续扩展其他窗口控制能力也更方便。
- 安装依赖
在pubspec.yaml中添加依赖:
dependencies: flutter: sdk: flutter window_manager: ^0.3.9 # 可替换为当前最新稳定版本
执行flutter pub get完成安装。
2. 配置窗口参数
在main.dart的main函数中初始化窗口配置:
import 'package:flutter/material.dart'; import 'package:window_manager/window_manager.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await windowManager.ensureInitialized(); // 配置窗口属性 WindowOptions windowOptions = const WindowOptions( size: Size(400, 800), // 窗口启动初始尺寸 minimumSize: Size(400, 800), // 最小窗口宽高 maximumSize: Size(400, 800), // 最大窗口宽高 // 最小和最大尺寸设为相同值时,用户无法通过拖拽调整窗口大小 windowButtonVisibility: false, // 隐藏窗口缩放按钮,避免用户点击缩放 ); await windowManager.waitUntilReadyToShow(windowOptions, () async { await windowManager.show(); await windowManager.focus(); }); runApp(const MyApp()); } // 后续原有App代码无需修改 class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text("固定尺寸窗口示例")), ), ); } }
方案二:修改Windows原生代码(无需引入第三方依赖)
如果不需要额外的窗口控制能力,也可以直接修改Windows原生层的窗口配置:
打开项目路径下的windows/runner/win32_window.cpp文件,找到Win32Window::CreateAndShow方法,修改窗口创建时的风格参数:
HWND window = CreateWindowEx( WS_EX_CLIENTEDGE, window_class.lpszClassName, title, // 去掉可拖拽调整的边框样式和最大化按钮 WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, static_cast<int>(size.width), static_cast<int>(size.height), nullptr, nullptr, GetModuleHandle(nullptr), this);
如果需要严格限制窗口最大最小尺寸,还可以添加WM_GETMINMAXINFO消息的处理逻辑,固定尺寸参数即可。
内容的提问来源于stack exchange,提问作者Khamidjon Khamidov
相关产品推荐
相关产品推荐

