Flutter笔记:桌面端应用多窗口管理方案

这篇具有很好参考价值的文章主要介绍了Flutter笔记:桌面端应用多窗口管理方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Flutter笔记
桌面端应用多窗口管理方案

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/134468587


【简介】:文本主要介绍 Flutter 桌面应用开发中多窗口管理。 指导开发者能够更轻松地构建具有多窗口功能的桌面应用程序,介绍一种简单的方式来创建和管理多个窗口,支持在 Windows、macOS 和 Linux 上构建原生桌面应用程序。使得开发者可以轻松地创建新窗口,控制窗口的大小、位置、最小化、最大化、全屏、关闭等操作,以及在不同窗口之间共享数据。
不同于单窗口,多串口中可以创建管理多个窗口,例如下main这个场景:

  • 应用启动时,打开一个窗口作为主窗口;
  • 主窗口上一个创建子窗口,并且可以以 广播 或者 指定子窗口 ID 两种形式发送消息;
  • 子串口可以有多个,不论主窗口还是众多子窗口,都以 ID 作为其通信的标识;
  • 应用栏失活和激活时显示为两种颜色、两种文字予以区分;>fluter windows 多窗口,Dart语言与Flutter框架开发笔记,前端、桌面端、移动端、UI、构建工具,Flutter,Dart,跨端,Windows,MacOS,Linux
    另请参见 《桌面应用窗口定制库 bitsdojo_window》,地址:https://blog.csdn.net/qq_28550263/article/details/134464678

这里仅仅基本实现了多窗口功能。关于更进一步的讲解和复杂需求的示例将在我 将于明年(2014)出版的《flutter应用开发——从基础到项目实战》一书中进行介绍,届时将发布出版信息,敬请关注。


1. 概述

1.1 多窗口管理简介

desktop_multi_window 它提供了一种简单的方式来创建和管理多个窗口。这个库的主要目标是使开发者能够更轻松地构建具有多窗口功能的桌面应用程序。这个库支持在 WindowsmacOSLinux 上构建原生桌面应用程序。它提供了一系列的 API,使得开发者可以轻松地创建新窗口,控制窗口的大小位置最小化最大化全屏关闭。此外,它还提供了在不同窗口之间共享数据(窗口通信)的功能。

使用 desktop_multi_window,开发者可以专注于应用程序的核心功能,而不需要花费大量的时间和精力在窗口管理上。这使得 Flutter 桌面应用开发变得更加简单和高效。

1.2 窗口生命状态简介

在使用 desktop_multi_window 库时,还有一个配套使用的库是 desktop_lifecycle。在桌面应用中,一个窗口在任何时候都可能被用户激活或非激活。例如,当用户点击一个窗口或者使用 Alt+Tab 切换到一个窗口时,该窗口就会被激活;当用户点击其他窗口或者使用 Alt+Tab 切换到其他窗口时,该窗口就会被非激活。这些状态变化对于桌面应用的用户体验非常重要,因此需要被正确地处理。

2. 库的安装和配置

2.1 添加多窗口依赖

要在 Flutter 项目中使用 desktop_multi_window,首先需要在项目的 pubspec.yaml 文件中添加 desktop_multi_window 作为依赖并保存。具体步骤如下:

  1. 打开 pubspec.yaml 文件。
  2. dependencies 部分添加 desktop_multi_window 的依赖,如下所示:
dependencies:
  flutter:
    sdk: flutter

  desktop_multi_window: ^0.2.0
  1. 保存 pubspec.yaml 文件。
  2. 在终端中运行 flutter pub get 命令,以获取 desktop_multi_window 的依赖包。

2.2 配置窗口状态依赖

要在 Flutter 项目中使用 desktop_lifecycle,首先需要在项目的 pubspec.yaml 文件中添加 desktop_lifecycle 的依赖。具体步骤如下:

  1. 打开 pubspec.yaml 文件,在 dependencies 部分添加 desktop_lifecycle 的依赖并保存。如下所示:
dependencies:
  flutter:
    sdk: flutter

  desktop_lifecycle: ^0.1.1
  1. 在终端中运行 flutter pub get 命令,以获取 desktop_lifecycle 的依赖包。

2.3 初始化窗口管理

在添加了 desktop_multi_window 的依赖之后,你可以在项目中使用 desktop_multi_window。以下是初始化的步骤:

  1. 在项目的 main.dart 文件中导入 desktop_multi_window 库,如下所示:
// mian函数中对窗口初始化模式进行控制
if (args.firstOrNull == 'multi_window') {
  runApp(const SubWindow());
}else{
  runApp(const MainWindow());
}
  1. 在你的 Flutter 代码中,你可以使用 WindowController 类来控制窗口。例如,你可以使用 WindowController.fromWindowId(windowId) 来获取一个窗口的控制器,然后使用这个控制器来控制窗口的大小、位置、标题等属性。

至此,desktop_multi_window 的安装和设置就完成了。接下来,你就可以使用 desktop_multi_window 来创建和管理你的 Flutter 桌面应用程序的多个窗口了。

3. 创建和管理窗口

3.1 创建新窗口

在 desktop_multi_window 中,新窗口的创建是通过 DesktopMultiWindow.createWindow 方法实现的。这个方法接收一个 JSON 字符串作为参数,该字符串包含了新窗口的一些初始设置。例如:

final window = await DesktopMultiWindow.createWindow(jsonEncode({
  'args1': 'Sub window',
  'args2': 100,
  'args3': true,
  'business': 'business_test',
}));

3.2 管理窗口属性

你可以使用 WindowController 类来管理窗口的属性,如大小、位置、标题等。例如,你可以使用以下代码来设置窗口的大小和位置:

window
  ..setFrame(const Offset(0, 0) & const Size(1280, 720))
  ..center()
  ..setTitle('Another window')
  ..show();

在上述代码中,setFrame 方法用于设置窗口的大小和位置,center 方法用于将窗口居中,setTitle 方法用于设置窗口的标题,show 方法用于显示窗口。

3.3 窗口的最小化、最大化、全屏和关闭操作

你可以使用 WindowController 类来进行窗口的最小化、最大化、全屏和关闭操作。例如,你可以使用以下代码来最小化窗口:

window.minimize();

你可以使用以下代码来最大化窗口:

window.maximize();

你可以使用以下代码来全屏窗口:

window.fullScreen();

你可以使用以下代码来关闭窗口:

window.close();

4. 窗口活动状态管理

4.1 监听窗口激活状态

desktop_lifecycle 提供了 DesktopLifecycle 类,你可以通过 DesktopLifecycle.instance.isActive 来获取当前窗口的激活状态。例如:

bool isActive = DesktopLifecycle.instance.isActive.value;

你也可以添加监听器来监听窗口的激活状态变化。例如:

DesktopLifecycle.instance.isActive.addListener(() {
  bool isActive = DesktopLifecycle.instance.isActive.value;
  // 在这里处理窗口的激活状态变化
});

4.2 处理窗口激活和非激活状态

当窗口的激活状态发生变化时,你可以在监听器中进行相应的处理。例如,你可以在窗口被激活时执行一些操作,而在窗口被非激活时执行一些其他的操作。以下是一个示例:

DesktopLifecycle.instance.isActive.addListener(() {
  bool isActive = DesktopLifecycle.instance.isActive.value;
  if (isActive) {
    // 窗口被激活,执行一些操作
  } else {
    // 窗口被非激活,执行一些其他的操作
  }
});

5. 在不同窗口之间共享数据

desktop_multi_window 提供了一种在不同窗口之间共享数据的机制。你可以使用 DesktopMultiWindow.invokeMethod 方法来向指定的窗口发送数据,然后在那个窗口中使用 DesktopMultiWindow.setMethodHandler 方法来接收和处理这些数据。以下是一个示例,展示了如何向指定的窗口发送数据:

final windowId = 1; // 窗口的 ID
final data = 'Hello, world!'; // 要发送的数据
DesktopMultiWindow.invokeMethod(windowId, 'onSend', data);

在上述代码中,invokeMethod 方法的第一个参数是窗口的 ID,第二个参数是方法名,第三个参数是要发送的数据。

然后,你可以在接收数据的窗口中使用 setMethodHandler 方法来接收和处理这些数据:

DesktopMultiWindow.setMethodHandler((MethodCall call, int fromWindowId) async {
  if (call.method == 'onSend') {
    final data = call.arguments; // 接收到的数据
    // 在这里处理数据
  }
});

在上述代码中,setMethodHandler 方法接收一个回调函数,这个函数有两个参数:一个是 MethodCall 对象,包含了方法名和参数;另一个是发送数据的窗口的 ID。你可以在这个回调函数中根据方法名来判断数据的类型,然后进行相应的处理。文章来源地址https://www.toymoban.com/news/detail-771659.html

到了这里,关于Flutter笔记:桌面端应用多窗口管理方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter笔记:Flutter的应用生命周期状态(lifecycleState)管理

    Flutter笔记 Flutter的应用生命周期状态(lifecycleState)管理 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/134127670 【介绍】: WidgetsBinding.instance 是Flutter中用于管理应用程序事件和生命周期的重要工具

    2024年02月06日
    浏览(44)
  • 【进阶知识】显示管理器,窗口管理器,桌面环境/桌面管理器,显示服务器

    进阶知识,在Linux的一个应用场景是个人电脑、个人PDA、移动交互设备,这些都会涉及到,显示管理、窗口管理、桌面环境、显示服务器等等,相对于一个还在用busybox、Buildroot构建散装操作系统的嵌入式Linux开发人员来说,上面的四个概念是令人震惊的、令人颅内高潮的。

    2024年02月03日
    浏览(36)
  • 记Flutter windows桌面端开发实战

    前言 从今年1月份开始项目落实后开始使用flutter进行windows桌面应用开发,到现在出了第一个大版本,历时大致2个半月,项目组主要成员2个,后边面临开发压力先后又有2位开发加入完成一小部分溢出功能。 开发前准备 调研了大量flutter windows方面的开发小部件、注意事项、插

    2024年02月10日
    浏览(32)
  • Flutter 打包 windows桌面端可执行文件

    因为个人兴趣爱好,在写一个跨平台工具。为了省事没去官网看文档,直接翻阅各大博客网站,一个简单的命令,博客写的内容比较复杂。为了方便自己和有需要同学,简单做一个记录。 Flutter提供了一种方便命令行的方式来打包桌面应用程序为可执行文件(.exe) 。 以下是

    2024年01月18日
    浏览(38)
  • Flutter Windows通过嵌入Native窗口实现渲染视频

    第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFI+CustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频(本章) 第六章 桌面端使用texture_rgba_renderer渲染视频 使用flutter在Windows上渲染视频,目前掌握的至少有

    2024年02月16日
    浏览(37)
  • Flutter桌面应用程序定义系统托盘Tray

    系统托盘 :系统托盘是一种用户界面元素,通常出现在操作系统的任务栏或桌面顶部。它是一个水平的狭长区域,用于显示各种图标和通知,以提供快速访问和操作特定应用程序或系统功能。系统托盘通常包含操作系统或第三方应用程序的图标,这些图标可以显示有关应用程

    2024年02月04日
    浏览(53)
  • Flutter PC桌面端 控制应用尺寸是否允许放大缩小

    桌面端中,登录、注册、找回密码页面不允许用户手动放大缩小,主页面允许 window_manager 使用教程请参照这篇博客:Flutter桌面端开发——window_manager插件的使用 题外话: 之前使用的是 bitsdojo_window 插件,使用方法请参照博客 bitsdojo_window 这个插件中,如果想要用户不允许操作

    2023年04月20日
    浏览(39)
  • C++调用opencv和windows api完成桌面窗口截图——以梦幻西游为例

    项目编写的C++程序,根据输入的字符串,遍历所有桌面窗口标题,查找包含该标题的窗口,对该桌面窗口进行截图,以梦幻西游为例 输入:桌面窗口包含的字符串 比如输入“梦幻”,程序就会截取桌面“梦幻西游”的窗口 输出:该桌面窗口的截图,数据类型为opencv的Mat矩阵

    2024年02月21日
    浏览(33)
  • Flutter桌面开发 — Windows平台App安装失败或无法运行的问题及其解决方式

    文中所提及的问题,大多和Windows系统缺少Visual C++ 可再发行组件相关,所以先写怎样安装 Visual C++ Redistributable 即 vc_redist.exe 。 下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=53587 点击下载,然后勾选对应的系统,然后点击next。下载完成后安装该软件。 错误描述:无法

    2024年02月04日
    浏览(74)
  • 关于Windows桌面远程后,unity程序无法全屏显示或者显示窗口默认最小化解决方法

    按以下步骤操作 1、Win+R打开运行,然后输入regedit打开注册表 2、根据计算机HKEY_CURRENT_USERSoftwareDefaultCompany路径找到DefaultCompany的文件夹 3、在DefaultCompany文件夹下找到unity打包时exe文件对应名称的文件夹,右键删除整个文件夹,删除后再去启动unity.exe程序即可恢复正常显示画

    2024年04月10日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包