Flutter桌面开发之窗口管理

简介: 今天跟着大家一起学习桌面开发之窗口管理,关于桌面窗口管理,我网上查了很久资料,我觉得window_manager 这个插件几乎可以满足市面上大部分需求了

今天跟着大家一起学习桌面开发之窗口管理,关于桌面窗口管理,我网上查了很久资料,我觉得window_manager 这个插件几乎可以满足市面上大部分需求了,地址
window_manager:https://pub.flutter-io.cn/packages/window_manager

安装

将此添加到你的软件包的 pubspec.yaml 文件:

dependencies: window_manager: ^0.2.7

全局初始化

import 'package:flutter/material.dart'; import 'package:window_manager/window_manager.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 必须加上这一行。 await windowManager.ensureInitialized(); runApp(MyApp()); }

常用方法

  • waitUntilReadyToShow

等待,直到准备好展示。

  • destroy

强制关闭窗口。

  • close

试着把窗口关上。

  • isPreventClose

检查是否正在拦截本地关闭信号。

  • setPreventClose

设置是否拦截本机关闭信号。当与onclose事件监听器结合使用时可能有用。这也将防止手动触发的关闭事件。

  • focus

聚焦在窗口上。

  • blur

从窗口移除焦点。

  • isFocused

返回bool -窗口是否聚焦。

  • show

显示并给予窗口焦点。

  • hide

隐藏窗口。

  • isVisible

返回bool -该窗口是否对用户可见。

  • isMaximized

返回bool -窗口是否被最大化。

  • maximize

最大化窗口。只在Windows上工作

  • unmaximize

Unmaximizes the window.

  • isMinimized

返回bool -窗口是否最小化。

  • minimize

最小化窗口。在某些平台上,最小化的窗口将显示在码头上。

  • restore

将窗口从最小化状态恢复到以前的状态。

  • isFullScreen

返回bool -窗口是否处于全屏模式。

  • setFullScreen

设置窗口是否应处于全屏模式。

  • setAspectRatio

这将使窗口保持一个纵横比。

  • setBackgroundColor

设置窗口的背景颜色。

  • setAlignment

将窗口移动到与屏幕对齐的位置。

  • center

将窗口移动到屏幕中央。

  • getBounds

返回矩形-窗口的边界作为对象。

  • setBounds

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

  • getSize

返回大小-包含窗口的宽度和高度。

  • setSize

将窗口调整为宽度和高度。

  • getPosition

返回偏移量-包含窗口的当前位置。

  • setPosition

移动窗口到位置。

  • setMinimumSize

将窗口的最小大小设置为宽度和高度。

  • setMaximumSize

将窗口的最大大小设置为宽和高。

  • isResizable

返回bool -窗口是否可以由用户手动调整大小。

  • setResizable

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

  • isMovable (macos)

返回bool -窗口是否可以被用户移动。

  • setMovable (macos)

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

  • isMinimizable (macos windows)

返回bool -该窗口是否可以由用户手动最小化。

  • setMinimizable (macos windows)

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

  • isClosable (windows)

返回bool -是否可以由用户手动关闭窗口。

  • isMaximizable (windows)

返回bool -该窗口是否可以由用户手动最大化。

  • setMaximizable

设置窗口是否可以由用户手动最大化。

  • setClosable (macos windows)

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

  • isAlwaysOnTop

返回bool -该窗口是否总是在其他窗口之上

  • setAlwaysOnTop

设置窗口是否始终显示在其他窗口的顶部。

  • isAlwaysOnBottom

返回bool -该窗口是否总是低于其他窗口。

  • setAlwaysOnBottom (linux)

设置窗口是否始终显示在其他窗口的下方。

  • getTitle

返回字符串-本机窗口的标题。

  • setTitle

将本机窗口的标题更改为title。

  • setTitleBarStyle

更改本机窗口的标题栏样式。

  • getTitleBarHeight

返回int -本机窗口的标题栏高度。

  • isSkipTaskbar

返回bool -是否启用跳过任务栏。

  • setSkipTaskbar

使窗口不显示在任务栏/ dock中。

  • setProgressBar (macos)

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

  • setIcon (windows)

设置窗口/任务栏图标。

  • hasShadow ( macos windows)

返回bool -窗口是否有阴影。在Windows上,总是返回true,除非窗口是无框架的。

  • setHasShadow (macos windows)

设置窗口是否应该有阴影。在Windows上,它不做任何事情,除非窗口是无框架的。

  • getOpacity

返回0.0(完全透明)和1.0(完全不透明)之间的double -。

  • setOpacity

设置窗口的不透明度。

  • setBrightness ( macos windows)

设置窗口的亮度。

  • setIgnoreMouseEvents

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

在此窗口中发生的所有鼠标事件将被传递到此窗口下方的窗口,但如果此窗口具有焦点,它仍将接收键盘事件。

  • startDragging

根据指定的鼠标下拉事件启动窗口拖动。

  • startResizing (linux windows)

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

最后我根据自己的业务需要整理成一个WindowUtil,方便扩展和使用

import 'package:flutter/material.dart'; import 'package:window_manager/window_manager.dart'; class WindowUtil { ///默认透明度 static final double defaultOpacity = 0.9; ///是否浮窗 static bool isOnTop = false; ///窗口初始化设置 static Future ensureInitialized() async { return await windowManager.ensureInitialized(); } ///初始化参数配置,这里根据自己的模块业务而定,我窗口默认是140,210 static void setWindowFunctions({bool? isMacOS}) async { WindowOptions windowOptions = WindowOptions( size: Size(140, 210), center: true, backgroundColor: Colors.transparent, //设置窗口是否显示在 任务栏或 Dock 上 skipTaskbar: false, titleBarStyle: isMacOS == true ? TitleBarStyle.normal : TitleBarStyle.hidden, ); windowManager.waitUntilReadyToShow(windowOptions, () async { await windowManager.show(); await windowManager.focus(); }); //设置当前窗口在屏幕的位置 // windowManager.setPosition(Offset.zero); windowManager.center(); //设置背景 //设置窗口透明度 // setOpacity(opacity: defaultOpacity); //设置是否可移动macOS windowManager.setMovable(true); //设置是否有阴影macOS windowManager.setHasShadow(false); //设置窗口是否可以由用户手动调整大小 windowManager.setResizable(true); //设置标题 windowManager.setTitle(''); //设置窗口是否总是显示在其他窗口的顶部 windowManager.setAlwaysOnTop(false); if (isMacOS == true) { //设置用户是否可以手动关闭该窗口 windowManager.setClosable(false); } else { windowManager.setClosable(true); windowManager.setPreventClose(true); } } //设置拖动窗口 static void startDragging() async { await windowManager.startDragging(); } //关闭窗口 static void close() async { windowManager.destroy(); } //设置窗口透明度 static void setOpacity([double? opacity]) async { opacity ??= defaultOpacity; //设置背景 // windowManager // .setBackgroundColor(AppColors.primaryColor.withOpacity(opacity)); windowManager.setBackgroundColor(Colors.transparent); //透明度小于0.1时,不设置setOpacity,避免窗口看不见 if (opacity >= 0.1) { //设置窗口透明度 windowManager.setOpacity(opacity); } } //设置浮窗 static void setAlwaysOnTop([bool? isAlwaysOnTop]) { isOnTop = isAlwaysOnTop ?? false; //设置窗口是否总是显示在其他窗口的顶部 windowManager.setAlwaysOnTop(isAlwaysOnTop ?? false); } }

效果图

image.png

相关文章
|
11月前
flutter开发中Use ‘const’ with the constructor to improve performance. Try adding the ‘const’ keyword to the constructor invocation.报错如何解决-优雅草卓伊凡
flutter开发中Use ‘const’ with the constructor to improve performance. Try adding the ‘const’ keyword to the constructor invocation.报错如何解决-优雅草卓伊凡
196 1
|
10月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
684 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
11月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
396 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
10月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
686 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
11月前
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
388 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
11月前
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
977 18
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
10月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
346 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
11月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
518 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
9月前
|
索引
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
454 7
|
11月前
|
缓存 前端开发 IDE
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
319 0
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈

热门文章

最新文章

下一篇