Flutter笔记:桌面应用 窗口定制库 bitsdojo_window

2024-02-23 18:50

本文主要是介绍Flutter笔记:桌面应用 窗口定制库 bitsdojo_window,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Flutter笔记
桌面应用窗口管理库 bitsdojo_window

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


在这里插入图片描述

高级:多窗口管理,请跳转到:《Flutter桌面端应用多窗口管理》,地址:https://jclee95.blog.csdn.net/article/details/134468587))

【简介】本文介绍一个当前 Flutter 桌面应用开发中自定义桌面窗口的模块 bitsdojo_window。 它允许你在 WindowsmacOSLinux 上构建原生桌面应用程序。bitsdojo_window 模块提供了一种简化窗口管理、自定义窗口外观和交互的方法,使开发者能够更轻松地构建具有桌面风格的应用程序。


1. 概述

bitsdojo_window 库为 Flutter 桌面应用开发提供了强大的支持。bitsdojo_window 提供了一种简化的方式来管理和自定义桌面窗口。这个库的主要目标是使开发者能够更轻松地构建具有桌面风格的应用程序。

bitsdojo_window 支持在 WindowsmacOSLinux 上构建原生桌面应用程序。它提供了一系列的 API,使得开发者可以轻松地控制窗口的大小、位置、最小化、最大化、全屏、关闭等操作。此外,它还允许开发者自定义窗口的外观,包括窗口的标题、图标、背景颜色等。

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

2. 安装和设置

2.1 添加 bitsdojo_window 依赖

要在 Flutter 项目中使用 bitsdojo_window,首先需要在项目的 pubspec.yaml 文件中添加 bitsdojo_window 的依赖。以下是添加依赖的步骤:

dependencies:flutter:sdk: flutterbitsdojo_window: ^0.1.5

然后在终端中运行下面的命令,以获取 bitsdojo_window 的依赖包:

flutter pub get

或者直接运行add命令以安装其最新的版本:

flutter pub add bitsdojo_window

2.2 初始化 bitsdojo_window

在添加了 bitsdojo_window 的依赖之后,需要在项目中初始化 bitsdojo_window

  1. 在项目的 main.dart 文件中导入 bitsdojo_window 库,如下所示:
import 'package:bitsdojo_window/bitsdojo_window.dart';
  1. main() 函数中调用 doWhenWindowReady() 函数,以确保窗口准备就绪后再进行初始化,如下所示:
void main() {// 处理原生和 Flutter 通信WidgetsFlutterBinding.ensureInitialized();runApp(MyApp());// 在这里配置 bitsdojo_windowdoWhenWindowReady(() {final win = appWindow;final initialSize = Size(600, 450);win.minSize = initialSize;win.size = initialSize;win.alignment = Alignment.center;win.title = "My Flutter App";win.show();});
}

在上述代码中,doWhenWindowReady() 函数会等待窗口准备就绪后再进行初始化。appWindowbitsdojo_window 库提供的一个全局对象,用于访问和控制应用程序的窗口。通过 appWindow 对象,可以设置窗口的最小大小、当前大小、位置、标题等属性,并可以显示窗口。

至此,bitsdojo_window 的安装和设置就完成了。接下来,你就可以使用 bitsdojo_window 来管理和自定义你的 Flutter 桌面应用程序的窗口了。

2.3 配置原生代码

在 Windows 上,需要在 windows\runner\main.cpp 文件中添加以下两行代码:

#include<bitsdojo_window_windows/bitsdojo_window_plugin.h>
auto bdw = bitsdojo_window_configure(BDW_CUSTOM_FRAME | BDW_HIDE_ON_STARTUP);

在这里插入图片描述
完成后保存。

在 macOS 上,需要在 macos\runner\MainFlutterWindow.swift 文件中进行以下修改:

import FlutterMacOS
import bitsdojo_window_macos // Add this lineclass MainFlutterWindow: BitsdojoWindow {override func bitsdojo_window_configure() -> UInt {return BDW_CUSTOM_FRAME | BDW_HIDE_ON_STARTUP}// rest of your code
}

其中

  • 如果你不想使用自定义框架而喜欢标准窗口标题栏和按钮,可以从上面的代码中删除 BDW_CUSTOM_FRAME
  • 如果你不想在启动时隐藏窗口,则可以从上面的代码中删除 BDW_HIDE_ON_STARTUP 。

在这里插入图片描述

3. 窗口管理

3.1 控制窗口的大小和位置

使用 bitsdojo_window,你可以轻松地控制窗口的大小和位置。以下是如何进行操作的示例:

void main() {runApp(MyApp());doWhenWindowReady(() {final win = appWindow;final initialSize = Size(800, 600);win.minSize = Size(600, 450);win.size = initialSize;win.alignment = Alignment.center;win.show();});
}

在上述代码中,minSize 属性用于设置窗口的最小大小,size 属性用于设置窗口的当前大小,alignment 属性用于设置窗口的位置。例如,Alignment.center 会将窗口置于屏幕中心。

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

bitsdojo_window 提供了一系列的函数,用于进行窗口的最小化、最大化、全屏和关闭操作。以下是如何进行操作的示例:

void main() {runApp(MyApp());doWhenWindowReady(() {final win = appWindow;// 最小化窗口win.minimize();// 最大化窗口win.maximize();// 全屏显示窗口win.showFullScreen();// 关闭窗口win.close();});
}

在上述代码中,minimize() 函数用于最小化窗口,maximize() 函数用于最大化窗口,showFullScreen() 函数用于全屏显示窗口,close() 函数用于关闭窗口。

请注意,这些操作通常会在响应用户的某些操作(例如点击按钮)时进行,而不是在 main() 函数中直接进行。

3.3 判断窗口是否已经最大化

可以使用 appWindow.isMaximized 属性来判断窗口是否已经最大化。如果窗口已经最大化,可以使用 RestoreWindowButton 组件来显示一个恢复窗口的按钮;如果窗口没有最大化,可以使用 MaximizeWindowButton 组件来显示一个最大化窗口的按钮。

appWindow.isMaximized? RestoreWindowButton(colors: buttonColors, onPressed: maximizeOrRestore): MaximizeWindowButton(colors: buttonColors, onPressed: maximizeOrRestore)

4. 自定义窗口外观

4.1 自定义窗口的标题和图标

使用 bitsdojo_window,你可以轻松地自定义窗口的标题和图标。以下是如何进行操作的示例:

void main() {runApp(MyApp());doWhenWindowReady(() {final win = appWindow;// 设置窗口标题win.title = "My Custom Title";// 设置窗口图标win.icon = "assets/icon.png";});
}

在上述代码中,title 属性用于设置窗口的标题,icon 属性用于设置窗口的图标。请注意,图标文件应该是项目的资源文件,需要在 pubspec.yaml 文件中进行声明。

4.2 自定义窗口的背景颜色

bitsdojo_window 也允许你自定义窗口的背景颜色。你可以通过 FlutterMaterialAppCupertinoApp 的 theme 属性来设置窗口的背景颜色。以下是如何进行操作的示例:

import 'package:flutter/material.dart';
import 'package:bitsdojo_window/bitsdojo_window.dart';void main() {runApp(const MyApp());doWhenWindowReady(() {const initialSize = Size(600, 450);appWindow.minSize = initialSize;appWindow.size = initialSize;appWindow.alignment = Alignment.center;appWindow.title = "Custom Window";appWindow.show();});
}class MyApp extends StatelessWidget {const MyApp({super.key});Widget build(BuildContext context) {return MaterialApp(theme: ThemeData(// 设置窗口的背景颜色scaffoldBackgroundColor: Colors.blue,),home: const Scaffold(body: Center(child: Text('Hello, World!'),),),);}
}

在这里插入图片描述

在上述代码中,primarySwatch 属性用于设置窗口的背景颜色。你可以选择任何你喜欢的颜色。

通过这些设置,你可以根据你的需求和喜好来自定义你的 Flutter 桌面应用程序的窗口外观。

4.3 自定义窗口按钮的颜色

可以使用 WindowButtonColors 类来设置窗口按钮的颜色。例如,可以设置最小化、最大化和关闭按钮的颜色。

final buttonColors = WindowButtonColors(normal: Colors.blue.withOpacity(.2),iconNormal: Colors.blue,mouseOver: Colors.red,mouseDown: Colors.green,iconMouseOver: Colors.white,iconMouseDown: Colors.orange,
);

然后,可以使用这个 buttonColors 对象来设置按钮的颜色:

MinimizeWindowButton(colors: buttonColors)
MaximizeWindowButton(colors: buttonColors)

在这里插入图片描述

5. 高级功能

5.1 窗口的拖拽操作

bitsdojo_window 提供了一种简单的方式来实现窗口的拖拽操作。你可以使用 MoveWindow 组件来包裹你希望用于拖拽窗口的部分。例如:

class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: MoveWindow(child: Text('My Custom Title'),),),body: MyHomePage(),),);}
}

在上述代码中,MoveWindow 组件包裹了标题文本,这意味着用户可以通过拖拽标题文本来移动窗口。

5.2 窗口的缩放操作

bitsdojo_window 也提供了一种简单的方式来实现窗口的缩放操作。你可以使用 ResizeWindow 组件来包裹你希望用于缩放窗口的部分,并指定缩放的方向。以下是如何进行操作的示例:

class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: Scaffold(body: Stack(children: [MyHomePage(),Positioned(right: 0,bottom: 0,child: ResizeWindow(width: 10,height: 10,edge: WindowEdge.bottomRight,),),],),),);}
}

在上述代码中,ResizeWindow 组件被放置在窗口的右下角,用户可以通过拖拽这个部分来缩放窗口。edge 属性用于指定缩放的方向,WindowEdge.bottomRight 表示从右下角进行缩放。

通过这些高级功能,你可以提供更丰富的交互体验,使你的 Flutter 桌面应用程序更加易用和友好。

这篇关于Flutter笔记:桌面应用 窗口定制库 bitsdojo_window的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/739595

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析