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
所有事件都触发