Flutter桌面窗口管理插件desktop_window_manager的使用

Flutter桌面窗口管理插件desktop_window_manager的使用

image

2.0.0

目前仅实现了Windows平台的支持。

IWindowsInfoProvider 接口

  • makeWindowControlList:生成窗口控制列表。
  • isCurrentWindow:检查当前窗口是否为指定窗口。
  • getTitle:获取窗口标题。
  • getIconHeadless:获取窗口无头图标。
  • getModuleName:获取模块名称。
  • getPath:获取路径。

IWindowControl 接口

  • getId:获取窗口ID。
  • isAlwaysOn:检查窗口是否始终在最前面。
  • setAlwaysOn:设置窗口是否始终在最前面。
  • getOpacity:获取窗口透明度。
  • setOpacity:设置窗口透明度。
  • isDisabled:检查窗口是否被禁用。
  • setDisabled:设置窗口是否被禁用。
  • isMinimized:检查窗口是否最小化。
  • setMinimize:设置窗口是否最小化。

完整示例代码

import 'package:bitmap/bitmap.dart';
import 'package:desktop_window_manager/desktop_window_manager.dart' show DesktopWindowManager;
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

void main() {
  // 准备处理特定情况的DesktopWindowManager
  DesktopWindowManager.ensureInitialized();

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // 添加位图头部并水平翻转
  Uint8List addBitmapHeaderAndFlipHorizontal(Uint8List headless) {
    const width = 36, height = 36;
    final bitmap = Bitmap.fromHeadless(
        width, height, Uint8List.fromList(headless.reversed.toList()));

    final modBitmap = bitmap.applyBatch([BitmapFlip.horizontal()]);
    return modBitmap.buildHeaded();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    final wiProvider = DesktopWindowManager.wiProvider;
    final wcList = wiProvider.makeWindowControlList();

    return MaterialApp(
      home: Scaffold(
        body: ListView.builder(
          itemCount: wcList.length,
          itemBuilder: (context, index) => Row(
            children: [
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  // 显示窗口图标
                  Image.memory(addBitmapHeaderAndFlipHorizontal(
                      wiProvider.getIconHeadless(wcList[index]))),
                  // 显示窗口标题
                  Text(
                    wiProvider.getTitle(wcList[index]),
                    style: const TextStyle(color: Colors.red),
                  ),
                  // 显示模块名称
                  Text(
                    wiProvider.getModuleName(wcList[index]),
                    style: const TextStyle(color: Colors.blue),
                  ),
                  // 显示路径
                  Text(
                    wiProvider.getPath(wcList[index]),
                    style: const TextStyle(color: Colors.green),
                  ),
                ],
              )
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter桌面窗口管理插件desktop_window_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter桌面窗口管理插件desktop_window_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 desktop_window_manager 插件进行 Flutter 桌面窗口管理的代码案例。这个插件允许你控制窗口的各种属性,比如大小、位置、标题等。

首先,确保你已经在 pubspec.yaml 文件中添加了 desktop_window_manager 依赖:

dependencies:
  flutter:
    sdk: flutter
  desktop_window_manager: ^0.1.0  # 请注意版本号,这里只是一个示例,请检查最新版本

然后,运行 flutter pub get 来获取依赖。

接下来,你可以在你的 Flutter 应用中使用这个插件。以下是一个简单的示例,展示了如何设置窗口标题、大小和位置。

import 'package:flutter/material.dart';
import 'package:desktop_window_manager/desktop_window_manager.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 获取窗口管理器实例
    final windowManager = DesktopWindowManager();

    // 设置窗口标题
    windowManager.setTitle('My Flutter Desktop App');

    // 设置窗口大小和位置(宽800,高600,左上角坐标(100, 100))
    windowManager.setSizeAndPosition(
      width: 800,
      height: 600,
      x: 100,
      y: 100,
    );

    // 创建一个简单的Flutter应用
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Desktop Window Management'),
        ),
        body: Center(
          child: Text('Hello, Flutter Desktop!'),
        ),
      ),
    );
  }
}

需要注意的是,由于 desktop_window_manager 插件直接操作底层窗口管理系统,它只在桌面平台上有效(如 Windows、macOS 和 Linux)。在移动平台(如 Android 和 iOS)上运行时,相关代码不会有任何效果。

此外,为了确保代码能够正确运行,你可能需要在项目根目录下创建一个 platform_channels 目录,并在其中添加一个 desktop 子目录,用于包含必要的原生代码(如果需要的话)。不过,对于简单的窗口管理操作,通常不需要手动编写原生代码,因为 desktop_window_manager 插件已经为你处理了这些底层细节。

请确保你的 Flutter 环境已经配置好对桌面平台的支持,并且你正在一个支持桌面开发的环境中运行你的应用(例如,使用 flutter run -d windowsflutter run -d macos 命令)。

希望这个示例能帮助你理解如何使用 desktop_window_manager 插件进行 Flutter 桌面窗口管理!

回到顶部