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

这篇具有很好参考价值的文章主要介绍了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 window窗口自定义,Dart语言与Flutter框架开发笔记,前端、桌面端、移动端、UI、构建工具,Flutter,Dart,Windows,Linix,MacOS,桌面端

高级:多窗口管理,请跳转到:《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: flutter

  bitsdojo_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_window
  doWhenWindowReady(() {
    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);

flutter window窗口自定义,Dart语言与Flutter框架开发笔记,前端、桌面端、移动端、UI、构建工具,Flutter,Dart,Windows,Linix,MacOS,桌面端
完成后保存。

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

import FlutterMacOS
import bitsdojo_window_macos // Add this line

class 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 。

flutter window窗口自定义,Dart语言与Flutter框架开发笔记,前端、桌面端、移动端、UI、构建工具,Flutter,Dart,Windows,Linix,MacOS,桌面端

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!'),
        ),
      ),
    );
  }
}

flutter window窗口自定义,Dart语言与Flutter框架开发笔记,前端、桌面端、移动端、UI、构建工具,Flutter,Dart,Windows,Linix,MacOS,桌面端

在上述代码中,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)

flutter window窗口自定义,Dart语言与Flutter框架开发笔记,前端、桌面端、移动端、UI、构建工具,Flutter,Dart,Windows,Linix,MacOS,桌面端

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 桌面应用程序更加易用和友好。文章来源地址https://www.toymoban.com/news/detail-790523.html

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

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

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

相关文章

  • Flutter PC桌面端 控制应用尺寸是否允许放大缩小

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

    2023年04月20日
    浏览(31)
  • flutter实战(01)windows桌面版 修改应用logo、名称、显示位置、显示大小

    说明:该系列文章主要为flutter在windows桌面平台实战中遇到的一些坑。 只需要在flutter项目/windows/runner/resources目录下替换原来的应用图标 app_icon.ico即可。 修改flutter项目/windows/runner/main.cpp 文件,在函数wWinMain中修改,代码如下: 说明:如果中文显示乱码,那么就使用notpad++编

    2024年01月25日
    浏览(74)
  • 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日
    浏览(34)
  • Flutter笔记 - ListTile组件及其应用

    Flutter笔记 ListTile组件及其应用 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/133411883 ListTile 组件表示一个包含一到三行文本的列表项,它可以选择带有图标或其它组件。 需要特别说明的是 ,虽然

    2024年02月07日
    浏览(32)
  • Flutter开发笔记 —— sqflite插件数据库应用

    今天在观阅掘金大佬文章的时候,了解到了该 sqflite 插件,结合官网教程和自己实践,由此总结出该文,希望对大家的学习有帮助! Flutter的 SQLite 插件。支持 iOS、Android 和 MacOS。 支持事务和batch模式 打开时自动进行版本管理 插入/查询/更新/删除查询的助手 iOS 和 Android 上的

    2024年02月04日
    浏览(46)
  • 银河麒麟OS C# .netcore桌面应用开发环境搭建笔记

    一、安装.netcore 参考在 Ubuntu 上安装 .NET - .NET | Microsoft Docs。 1、x64平台:可直接用包管理安装。(仅在 x64 体系结构上支持包管理器安装。) 2、arm等其他平台:通过一些其他方式(例如使用 Snap、安装程序脚本或通过手动二进制安装)安装 .NET。 a)手动安装: 先创建并进入

    2024年02月07日
    浏览(29)
  • Win10 开机跳过桌面后台,启动自己的定制程序

    在做定制系统时,我们经常想要电脑启动仅加载自己的系统程序,而不是进入 windows 桌面环境,从而显得系统更加专业(~_~)。此时有一个简单的办法,通过修改 windows 注册表来达到目的,操作简单,使用方便。 1、打开注册表(Win键+R,在运行框里输入 regedit ,然后回车打开

    2024年02月05日
    浏览(36)
  • Android 13.0 Launcher3定制化之桌面分页横线改成圆点显示功能实现

    在13.0的系统开发中,在进行launcher3的定制化中,在双层改为单层的开发中,在原生的分页 是横线,而为了美观就采用了系统原来的另外一种分页方式,就是圆点比较美观,接下来就来分析下相关的实现,然后实现其功能 在Launcher3中的核心布局中,最核心的就是workspace hotse

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

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

    2024年02月03日
    浏览(25)
  • MAUI桌面端标题栏设置和窗口调整

    如果你现在开始学习并使用MAUI开发桌面端,那么接下来的问题相信你都会遇到并且会想着尝试找方法解决它 本人在使用目前VS2022最新版17.4Professional版创建新的MAUI APP 基于.NET6.0项目时,发现完全找不到根wpf一样的WindowStyle或者ResizeMode这样的属性,有点强迫症,一定要把这个标

    2024年02月12日
    浏览(25)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包