flutter如何使用window_manager插件

在Flutter项目中集成window_manager插件时遇到问题,按照官方文档配置后仍然无法控制窗口大小和位置。具体表现为:

  1. 在main.dart中初始化插件后调用setSize()无效
  2. 尝试通过WindowManager().waitUntilReadyToShow()延迟设置窗口属性也未生效
  3. 安卓端已添加<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>权限
    请问正确的插件初始化流程是什么?是否需要额外配置桌面端(Windows/macOS)的编译选项?
2 回复

使用flutter window_manager插件的方法:

  1. 安装插件 在pubspec.yaml中添加:
dependencies:
  window_manager: ^0.3.0
  1. 基本使用
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();
  1. 常用功能:
  • 窗口拖拽: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桌面应用的窗口行为了。

回到顶部