flutter如何使用window_manager插件
在Flutter项目中集成window_manager插件时遇到问题,按照官方文档配置后仍然无法控制窗口大小和位置。具体表现为:
- 在main.dart中初始化插件后调用setSize()无效
- 尝试通过WindowManager().waitUntilReadyToShow()延迟设置窗口属性也未生效
- 安卓端已添加<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>权限
请问正确的插件初始化流程是什么?是否需要额外配置桌面端(Windows/macOS)的编译选项?
2 回复
使用flutter window_manager插件的方法:
- 安装插件 在pubspec.yaml中添加:
dependencies:
window_manager: ^0.3.0
- 基本使用
import 'package:window_manager/window_manager.dart';
// 初始化窗口
await windowManager.ensureInitialized();
// 设置窗口大小
windowManager.setSize(Size(800, 600));
// 设置窗口位置
windowManager.setPosition(Offset(100, 100));
// 设置窗口标题
windowManager.setTitle('My App');
// 窗口置顶
windowManager.setAlwaysOnTop(true);
// 最小化窗口
windowManager.minimize();
// 关闭窗口
windowManager.close();
- 常用功能:
- 窗口拖拽:
windowManager.startDragging() - 窗口全屏:
windowManager.setFullScreen(true) - 窗口聚焦:
windowManager.focus() - 隐藏/显示窗口:
windowManager.hide()/windowManager.show()
注意:需要在main函数中初始化,并处理桌面平台的兼容性。
更多关于flutter如何使用window_manager插件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用window_manager插件可以控制桌面应用窗口的大小、位置、最小化、最大化等行为。以下是基本使用方法:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
window_manager: ^0.3.0
2. 基本使用
初始化窗口管理器
import 'package:window_manager/window_manager.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 等待窗口管理器初始化
await windowManager.ensureInitialized();
// 设置窗口选项
WindowOptions windowOptions = WindowOptions(
size: Size(800, 600),
center: true,
backgroundColor: Colors.transparent,
skipTaskbar: false,
titleBarStyle: TitleBarStyle.hidden,
);
windowManager.waitUntilReadyToShow(windowOptions, () async {
await windowManager.show();
await windowManager.focus();
});
runApp(MyApp());
}
常用窗口操作
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Window Manager Demo'),
actions: [
IconButton(
icon: Icon(Icons.minimize),
onPressed: () => windowManager.minimize(),
),
IconButton(
icon: Icon(Icons.close),
onPressed: () => windowManager.close(),
),
],
),
body: Column(
children: [
ElevatedButton(
onPressed: () => windowManager.maximize(),
child: Text('最大化'),
),
ElevatedButton(
onPressed: () => windowManager.unmaximize(),
child: Text('取消最大化'),
),
ElevatedButton(
onPressed: () => windowManager.setSize(Size(400, 300)),
child: Text('设置窗口大小'),
),
ElevatedButton(
onPressed: () => windowManager.setPosition(Offset(100, 100)),
child: Text('设置窗口位置'),
),
],
),
),
);
}
}
3. 更多功能
监听窗口事件
windowManager.addListener(WindowListener(
onWindowClose: () {
// 窗口关闭前的处理
return true; // 返回false可阻止关闭
},
onWindowFocus: () {
print('窗口获得焦点');
},
onWindowBlur: () {
print('窗口失去焦点');
},
));
设置窗口标题
await windowManager.setTitle('我的应用');
设置窗口图标
await windowManager.setIcon('assets/icon.ico');
注意事项
- 主要用于Windows、macOS、Linux桌面应用
- 移动端不支持此插件
- 某些功能在不同平台可能有差异
这样你就可以通过window_manager插件灵活控制Flutter桌面应用的窗口行为了。

