Flutter桌面端开发——window_manager插件的使用

在准备学习使用 flutter 开发桌面端的时候,找到了 bitsdojo_window 这个插件

window_manager 可以用来调整桌面端的窗口大小和位置

安装

点击 window_manager 获取最新版本

pubspec.yaml

dependencies:
  window_manager: ^last_version

使用

按照官方文档,添加如下代码到 lib/main.dart

import 'package:flutter/material.dart';
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());
}

按照以上方法直接运行,会有个小 bug,可以运行试一下。

要想修复这个问题,需要打开 windows/runner/win32_window.cpp 文件,在大约 119 行的方法中做如下修改:

HWND window = CreateWindow(
  // 原代码 window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
  window_class, title.c_str(), WS_OVERLAPPEDWINDOW,

macOS 和 Linux 端查看 https://github.com/leanflutter/window_manager#hidden-at-launch 进行更改。

👻本来是想做个教程的,然后发现官方文档把每个方法和用处都写出来了,这里就做个翻译。还有一些例子可以去文档看看。

这里有几个组件是文档没有写的:

  • DragToMoveArea
  • DragToResizeArea
  • VirtualWindowFrame(仅Linux)
  • WindowCaption
  • WindowCaptionButtonIcon

WindowManager

destroy macos windows

强制关闭窗口

close

关闭窗口

isPreventClose

检测窗口是否将要关闭

setPreventClose

用来覆盖默认的关闭程序,具体文档有例子

focus

聚焦在窗口上

blur

从窗口移除聚焦

isFocused macos windows

检测当前是否聚焦在窗口

show

显示并聚焦于窗口

hide

隐藏窗口

isVisible

检测窗口当前是否对用户可见

isMaximized

检测当前窗口是否最大化

maximize

最大化窗口

unmaximize

取消窗口最大化

isMinimized

检测当前窗口是否是最小化

minimize

最小化窗口

restore

从最小化状态下恢复窗口

isFullScreen

检测当前是否全屏

setFullScreen

设置窗口全屏

setAspectRatio

使窗口保持宽高比

setBackgroundColor

设置背景色

getBounds

获取窗口的边界大小

setBounds

调整窗口大小,并将窗口移动到提供的边界

getPosition

获取当前窗口在屏幕的位置

setAlignment

设置窗口对齐到屏幕的位置

center

设置窗口显示在屏幕中间

setPosition

设置当前窗口在屏幕的位置

getSize

获取窗口的大小

setSize

设置窗口的大小

setMinimumSize

设置窗口尺寸的最小值

setMaximumSize

设置窗口尺寸的最大值

isResizable

检测用户是否可以手动调整窗口大小

setResizable

设置窗口是否可以由用户手动调整大小

isMovable macos

检测用户是否可以移动窗口

setMovable macos

设置用户是否可以移动窗口

isMinimizable macos windows

检测用户是否可以手动最小化该窗口

setMinimizable macos windows

设置用户是否可以手动最小化窗口

isClosable macos windows

检测用户是否可以手动关闭该窗口

setClosable macos windows

设置用户是否可以手动关闭该窗口

isAlwaysOnTop

检测窗口是否总是显示在其他窗口的顶部

setAlwaysOnTop

设置窗口是否总是显示在其他窗口的顶部

getTitle

获取原生窗口的标题

setTitle

设置原生窗口的标题

setTitleBarStyle macos windows

设置标题栏的显示风格

getTitleBarHeight macos windows

获取标题栏的高度

setSkipTaskbar

设置窗口是否显示在 任务栏或 Dock 上

setProgressBar macos

在进度条中设置进度值。有效范围为[0,1.0]。

hasShadow macos

检测当前窗口是否有阴影

setHasShadow macos

设置窗口是否应该有阴影

getOpacity macos windows

获取窗口透明度,在0(完全透明)—1(完全不透明)。Linux总是返回1

setOpacity macos windows

设置窗口透明度

setBrightness macos windows

设置窗口的亮度

setIgnoreMouseEvents

使窗口忽略所有鼠标事件。

在这个窗口中发生的所有鼠标事件都会传递到这个窗口下面的窗口,但是如果这个窗口有焦点,它仍然会接收键盘事件。

startDragging

基于指定的鼠标按下事件启动窗口拖动

startResizing linux windows

根据指定的鼠标按下和移动事件启动窗口大小调整

WindowListener

onWindowClose

当窗口关闭时触发

onWindowFocus

当窗口聚焦时触发

onWindowBlur

当窗口失去焦点时触发

onWindowMaximize

当窗口最大化时触发

onWindowUnmaximize

当窗口退出最大化时触发

onWindowMinimize

当窗口最小化时触发

onWindowRestore

当窗口从最小化状态恢复时触发

onWindowResize

当窗口重新调整大小后触发

onWindowMove

当窗口移动时触发

onWindowEnterFullScreen

当窗口进入全屏状态时触发

onWindowLeaveFullScreen

当窗口离开全屏状态时触发

onWindowEvent

所有事件都触发

posted @ 2022-03-13 15:41  菠萝橙子丶  阅读(7607)  评论(8编辑  收藏  举报