原创flutter3.32+dart3.8+window_manager桌面OS解决方案Flutter3MacOS

flutter3_macos最新研发flutter3.32+dart3.8+getx+window_manager+reorderables客户端os管理系统模板。支持macOSwindows两种桌面布局风格、毛玻璃虚化背景、桌面栅格布局模板、Dock菜单可拖拽排序、自定义JSON配置桌面/dock菜单。

技术栈

  • 编辑器:VScode
  • 框架技术:Flutter3.32+Dart3.8
  • 窗口管理:window_manager^0.5.1
  • 路由/状态管理:get^4.7.2
  • 缓存服务:get_storage^2.1.1
  • 拖拽排序:reorderables^0.6.0
  • 图表组件:fl_chart^1.0.0
  • 托盘管理:system_tray^2.0.3
  • 日历插件:syncfusion_flutter_calendar^30.1.42

项目特性

  1. 支持macos/windows两种桌面风格
  2. 经典程序坞Dock菜单(可拖拽排序/二级菜单)
  3. 支持自定义json配置桌面菜单和Dock菜单
  4. 自研桌面栅格化布局模板
  5. 自定义桌面个性化壁纸、全场景毛玻璃虚化UI质感
  6. 支持自定义弹窗加载页面组件(支持全屏/拖拽/缩放)

项目结构目录

flutter-macos使用最新版跨平台框架 flutter3.32+dart3.8 搭建项目模板。

flutter3-macOS已经同步到我的原创作品集,有需要的可以去下载使用。

flutter3.32+window_manager桌面端OS管理系统

项目入口文件main.dart

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:system_tray/system_tray.dart';
import 'package:window_manager/window_manager.dart'; import 'utils/common.dart'; // 引入布局模板
import 'layouts/desktop.dart'; // 引入路由管理
import 'router/index.dart'; void main() async {
// 初始化国际化语言
initializeDateFormatting(); // 初始化get_storage本地存储
await GetStorage.init(); // 初始化window_manager窗口
WidgetsFlutterBinding.ensureInitialized();
await windowManager.ensureInitialized();
WindowOptions windowOptions = const WindowOptions(
title: 'Flutter-MacOS',
size: Size(1000, 640),
center: true,
backgroundColor: Colors.transparent,
skipTaskbar: false,
titleBarStyle: TitleBarStyle.hidden, // 是否隐藏系统导航栏
windowButtonVisibility: false,
);
windowManager.waitUntilReadyToShow(windowOptions, () async {
windowManager.setAsFrameless(); // 无边框
windowManager.setHasShadow(true); // 是否有阴影
await windowManager.show();
await windowManager.focus();
}); await initSystemTray(); runApp(const MyApp());
} // 初始化系统托盘图标
Future<void> initSystemTray() async {
String trayIco = 'assets/images/tray.ico';
SystemTray systemTray = SystemTray(); // 初始化系统托盘
await systemTray.initSystemTray(
title: 'Flutter-MacOS',
iconPath: trayIco,
); // 右键菜单
final Menu menu = Menu();
await menu.buildFrom([
MenuItemLabel(label: '打开主界面', image: 'assets/images/tray_main.bmp', onClicked: (menuItem) async => await windowManager.show()),
MenuItemLabel(label: '隐藏窗口', image: 'assets/images/tray_hide.bmp', onClicked: (menuItem) async => await windowManager.hide()),
MenuItemLabel(label: '设置中心', image: 'assets/images/tray_setting.bmp', onClicked: (menuItem) => {}),
MenuItemLabel(label: '锁屏', image: 'assets/images/tray_lock.bmp', onClicked: (menuItem) => {}),
MenuItemLabel(label: '退出', image: 'assets/images/tray_logout.bmp', onClicked: (menuItem) async => await windowManager.destroy()),
]);
await systemTray.setContextMenu(menu); // 右键事件
systemTray.registerSystemTrayEventHandler((eventName) async {
debugPrint('eventName: $eventName');
if (eventName == kSystemTrayEventClick) {
Platform.isWindows ? await windowManager.show() : systemTray.popUpContextMenu();
} else if (eventName == kSystemTrayEventRightClick) {
Platform.isWindows ? systemTray.popUpContextMenu() : await windowManager.show();
}
});
} class MyApp extends StatelessWidget {
const MyApp({super.key}); @override
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'FLUTTER3 MACOS',
debugShowCheckedModeBanner: false,
// 配置主题
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),
useMaterial3: true,
// 修复windows端字体粗细不一致
fontFamily: Platform.isWindows ? 'Microsoft YaHei' : null,
),
home: const Desktop(),
// 初始路由
initialRoute: Common.isLogin() ? '/' : '/login',
// 路由页面
getPages: routePages,
);
}
}

flutter-macos桌面布局模板

项目内置了macos+windows两种风格桌面布局模板。

return Scaffold(
key: scaffoldKey,
body: Obx(() {
return Container(
// 背景图主题
decoration: skinController.skinUrl.isNotEmpty ? BoxDecoration(
image: DecorationImage(
image: AssetImage('${skinController.skinUrl}'),
fit: BoxFit.cover,
),
)
:
// 默认渐变色
BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [Color(0xFF454ED4), Color(0xFFBC40D4)],
),
),
child: DragToResizeArea(
child: Flex(
direction: Axis.vertical,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// 顶部模块
widget.header ?? WindowTitlebar(
onDrawer: () {
scaffoldKey.currentState?.openEndDrawer();
},
), // 桌面模块
Expanded(
child: widget.body ?? Container(),
), // 底部模块
Container(
child: widget.footer,
),
],
),
),
);
}),
);

桌面布局模板

class _DesktopState extends State<Desktop> {
SettingController settingController = Get.put(SettingController()); @override
Widget build(BuildContext context) {
return Obx(() {
final layout = settingController.settingData['dock'];
return Layout(
// 桌面菜单
body: layout == 'macos' ? MacDesktop() : WindowDesktop(),
// 底部导航
footer: layout == 'macos' ? MacDock() : WindowDock(),
);
});
}
}

桌面菜单JSON配置参数

/**
* ================== 桌面OS菜单配置 ==================
* [label] 图标标题
* [imgico] 图标(本地或网络图片) 支持Icon图标、自定义组件、svg/png...类型
* [path] 跳转路由页面
* [link] 跳转外部链接
* [hideLabel] 是否隐藏图标标题
* [background] 自定义图标背景色
* [size] 栅格磁贴布局(1x1 ... 12x12)
* [onClick] 点击图标回调函数
* children 二级菜单
*/

桌面菜单JSON配置片段

late List deskMenus = [
{
'uid': '6c84fb90-12c4-11e1-840d-7b25c5ee775a',
'label': '主页',
'list': [
{'label': '今日', 'imgico': const Today(), 'hideLabel': true, 'size': '3x2'},
{'label': '日历', 'imgico': const Calendar2x2(), 'size': '2x2'},
{
'label': '便签', 'imgico': const Notebook(), 'size': '3x2',
'onClick': () => {
navigator?.push(FdialogRoute(
child: Fdialog(
title: Text('便签'),
content: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.turned_in_not_rounded, color: Colors.black26, size: 40.0,),
Text('自定义便签', style: TextStyle(color: Colors.black38),)
],
)
),
width: 375,
height: 400,
maximizable: true,
resizeable: true,
),
))
}
},
{'label': '备忘录', 'imgico': const Note(), 'size': '2x2'},
{'label': '倒计时', 'imgico': const Countdown(), 'size': '2x2'}, // ...
]
},
// ...
{
'uid': '9a16fb90-12c4-11e1-840d-7b25c5ee775a',
'label': '摸鱼',
'list': [
{'label': 'Flutter3.32', 'imgico': 'assets/images/logo.png', 'link': 'https://flutter.dev/', 'background': Color(0xFFEAFAFF), 'size': '2x2'},
{'label': 'Github', 'imgico': 'assets/images/svg/github.svg', 'link': 'https://github.com/', 'background': Color(0xff607d8b),},
{'label': '掘金', 'imgico': 'assets/images/svg/juejin.svg', 'link': 'https://juejin.cn/', 'background': Color(0xff0984fe), 'size': '1x2'},
{'label': '哔哩哔哩', 'imgico': 'assets/images/svg/bilibili.svg', 'link': 'https://www.bilibili.com/', 'background': Color(0xfffe65a6), 'size': '3x2'},
// ...
]
},
{
'uid': 'u738f210-807e-1e4e-1550-4deefac27e48',
'label': 'AI',
'list': [
{'label': 'DeepSeek', 'imgico': 'https://www.faxianai.com/wp-content/uploads/2025/02/20250205134524-1febd.png', 'link': 'https://chat.deepseek.com/', 'hideLabel': true, 'background': Color(0xffffffff), 'size': '3x2'},
{'label': '腾讯元宝', 'imgico': 'https://www.faxianai.com/wp-content/uploads/2025/02/20250224143149-7fe1f.png', 'link': 'https://yuanbao.tencent.com/', 'background': Color(0xffffffff), 'size': '2x2'},
// ...
]
},
{
'uid': '3u85fb90-12c4-11e1-840d-7b25c5ee775a',
'label': '工作台',
'list': [
{'label': 'Flutter\n3.22', 'imgico': Padding(padding: EdgeInsets.all(5.0), child: Image.asset('assets/images/logo.png'),), 'link': 'https://flutter.dev/', 'background': Color(0xffffffff), 'size': '2x1'},
{'label': 'Dart中文官方文档', 'imgico': 'assets/images/dart.png', 'link': 'https://dart.cn/'},
{'label': '日历', 'imgico': const Calendar1x1(), 'background': const Color(0xffffffff),},
{'label': '首页', 'imgico': const Icon(Icons.home_outlined), 'path': '/home'},
{'label': '工作台', 'imgico': const Icon(Icons.poll_outlined), 'path': '/dashboard'},
{
'label': '组件',
'children': [
{'label': '组件', 'imgico': 'assets/images/svg/component.svg', 'path': '/component'},
{'label': '表单管理', 'imgico': 'assets/images/svg/form.svg', 'path': '/form'},
{'label': '表格', 'imgico': 'assets/images/svg/table.svg', 'path': '/table'},
{'label': '订单', 'imgico': 'assets/images/svg/order.svg', 'path': '/order'},
{'label': 'Editor', 'imgico': 'assets/images/svg/editor.svg', 'path': '/editor'},
]
},
{
'label': '管理中心',
'children': [
{
'label': '个人空间', 'imgico': 'assets/images/svg/my.svg',
'onClick': () => {
// ...
}
},
{'label': '用户管理', 'imgico': 'assets/images/svg/user.svg', 'path': '/user'},
{'label': '权限设置', 'imgico': 'assets/images/svg/role.svg', 'path': '/role'},
{'label': '日志', 'imgico': 'assets/images/svg/logs.svg', 'path': '/logs'},
{'label': '设置', 'imgico': 'assets/images/svg/settings.svg', 'path': '/setting'},
]
},
{
'label': '编程开发',
'children': [
{'label': 'Flutter', 'imgico': 'assets/images/logo.png', 'link': 'https://flutter.dev/', 'background': const Color(0xFFDAF2FA),},
{'label': 'DeepSeek深度求索', 'imgico': 'https://www.faxianai.com/wp-content/uploads/2025/02/20250205134524-1febd.png', 'link': 'https://chat.deepseek.com/', 'background': Color(0xffffffff), 'size': '2x1'},
// ...
]
},
{
'label': '关于', 'imgico': const Icon(Icons.info),
'onClick': () => {
// ...
}
},
{
'label': '公众号', 'imgico': const Icon(Icons.qr_code),
'onClick': () => {
// ...
}
},
]
}
];

桌面Dock菜单

桌面Dock菜单配置参数

/**
* ================== 桌面dock菜单配置项 ==================
* [label] 图标标题
* [imgico] 图标(本地或网络图片) 支持Icon图标、自定义组件、svg/png...类型
* [path] 跳转路由页面
* [link] 跳转外部链接
* [active] 激活圆点
* [onClick] 点击图标回调函数
* children 二级菜单
*/

以上就是flutter3.32搭建跨平台仿macOS+windows桌面端os系统的一些知识分享,希望对大家有所帮助!

附上几个最新项目实例

最新研发flutter3.27+bitsdojo_window+getx客户端仿微信聊天Exe应用

最新版Flutter3.32+Dart3.8跨平台仿微信app聊天界面|朋友圈

最新版uniapp+vue3+uv-ui跨三端短视频+直播+聊天【H5+小程序+App端】

Uniapp-DeepSeek跨三端AI助手|uniapp+vue3+deepseek-v3流式ai聊天模板

vue3-webseek网页版AI问答|Vite6+DeepSeek+Arco流式ai聊天打字效果

flutter3-dymall仿抖音直播商城|Flutter3.27短视频+直播+聊天App实例

Tauri2.0-Vue3OS桌面端os平台|tauri2+vite6+arco电脑版OS管理系统

Tauri2.0+Vite5聊天室|vue3+tauri2+element-plus仿微信|tauri聊天应用

Electron31-Vue3Admin管理系统|vite5+electron+pinia桌面端后台Exe

Electron32-ViteOS桌面版os系统|vue3+electron+arco客户端OS管理模板

uniapp+vue3聊天室|uni-app+vite4+uv-ui跨端仿微信app聊天语音/朋友圈

Flutter3-MacOS桌面OS系统|flutter3.32+window_manager客户端OS模板的更多相关文章

  1. Mac OS系统

    Mac OS系统 目录 概述 Mac OS系统常用操作 概述 Mac OS系统常用操作 显示或隐藏文件 在终端输入:defaults write com.apple.finder AppleShowA ...

  2. Google工程师打造Remix OS系统 桌面版安卓下载

    三位前Google工程师打造的Remix OS系统终于来到了PC桌面上,现已可以下载尝鲜. Remix OS for PC基于Android-x86项目,由安卓5.1 Lollipop深度定制而来,不 ...

  3. windows服务器装macos虚拟机(vmware)系统

    VMware14安装黑苹果macOS10.13流程 一.准备工具 VMware Workstation 14.1.2 Pro macOS High Sierra 10.13.iso格式或.cdr格式( ...

  4. 在MacOS和iOS系统中使用OpenCV

    在MacOS和iOS系统中使用OpenCV 前言 OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在 MacOS 和 iOS 上使用 OpenCV ...

  5. 怎么查看mac系统是32位还是64位的操作系统

    如何查看mac系统是32位还是64位的操作系统 (一)点击工具栏左上角点击 (苹果Logo)标志,关于本机  -->  更多信息 --> 系统报告  -->(左侧栏中)软件 (二) ...

  6. Mac OS 系统开发环境的一些坑

    最近换 Mac OS 系统开发,运行项目时遇到各种报错,记录下: 1.拉取项目后,需要安装依赖 npm install ,提示需要安装 xcode,报错如下. 从官网下载 xcode 时提示要更新最新 ...

  7. VMWare15 安装 Mac OS 系统

    文章目录VMWare15 安装 Mac OS 系统安装环境工具准备准备工作MAC虚拟机设置启动MAC前准备工作安装系统安装VMware Tool注意事项参考链接安装环境WIN10VMware Work ...

  8. OS.js – 开源的 Web OS 系统,赶快来体验

    OS.js 是一个开源的 Web OS 系统,可以在浏览器中运行,提供了窗口管理器,应用程序API,用户界面开发套件和抽象的文件系统等.可以部署在 Node 或者 PHP 环境中运行.OS.js is ...

  9. Linux系统查看系统是32位还是64位方法总结

    这篇博客是总结.归纳查看Linux系统是32位还是64位的一些方法,很多内容来自网上网友的博客.本篇只是整理.梳理这方面的知识,方便自己忘记的时候随时查看. 方法1:getconf LONG_BIT ...

  10. OS 系统下安装MySql 配置MySql环境变量

    学习Hive需要,闲话不说 本文的内容: 下载Mysql for Mac 下载Mysql Workbench 安装 Mysql 和 Mysql Workbench 配置Mysql在OS 系统上的环境变 ...

随机推荐

  1. ZeRO:一种去除冗余的数据并行方案

    ZeRO:一种去除冗余的数据并行方案 目前训练超大规模语言模型主要有两条技术路线: TPU + XLA + TensorFlow/JAX GPU + Pytorch + Megatron + Deep ...

  2. TVM: Device/Target Interactions

    任何新的运行时环境都必须实现三个主要方面: DeviceAPI类为特定设备提供了一个句柄,以及用于与之交互的API.它定义了一个通用接口,用于查询设备参数(例如可用内存.线程数量等)和执行简单操作(例 ...

  3. Python内置库itertools简单学习

    该库为满足特定需要的比较高效的迭代器内置库,在数据科学中的应用也不少,故有必要了解一下: import itertools import sys 无限迭代器(Infinite iterators) I ...

  4. Hyperledger Fabric出块配置详解

    Hyperledger Fabric的出块主要是Orderer节点负责,出块配置位于创世区块中,支持定时出块.达到一定交易数出块两种条件.出块配置位于configtx.yaml中,修改出块配置后需要重 ...

  5. 按下 F12 打开开发者工具,它凭什么能监控所有网络请求?

    兄弟们,咱们天天跟浏览器打交道,F12 可能比键盘上其他任何一个功能键按得都多.我们习惯了在 Network 面板里看着请求瀑布流,调试 API,分析性能. 但你有没有停下来,哪怕一次,问过自己一个问 ...

  6. Spring注解中@Resource和@Authwired的区别

    Spring注解中@Resource和@Authwired的区别 @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 by ...

  7. Java 基础记录

    SpringBoot SpringBoot优点 Create stand-alone Spring applications 创建独立Spring应用 Embed Tomcat, Jetty or U ...

  8. ATE测试工程师是做什么的?

    这是IC男奋斗史的第28篇原创 本文1437字,预计阅读4分钟. 前两天我们一个做封装的同事问我说,目前ATE测试工程师在就业市场上很火,很多公司都在急招,猎头也让他帮忙有偿推荐候选人.ATE测试工程 ...

  9. 关于自定义比较函数 usort 如何使用 类中的方法

    http://blog.csdn.net/qdujunjie/article/details/42081137

  10. 网络流最大流Dinic算法

    感谢董晓老师:博客,b站 /* Dinic算法的思路是,用bfs进行分层,限制后面dfs每次的搜索深度, 并且,在dfs的过程中,直接把当前这个路走到u的容量限制分给u的各个出边 */ #includ ...