桌面应用开发,Flutter 与 Electron如何选

作者:Karl_wei日期:2025/12/1

前言:这一年来我基本处于断更的状态,我知道在AI时代,编码的成本已经变得越来越低,技术分享的流量必然会下降。但这依然是一个艰难的过程,日常斥责自己没有成长,没有作品。

除了流量问题、巨量的工作,更多的原因是由于技术栈的变化。我开始使用Electron编写一个重要的AI产品,并且在 Flutter 与 Electron 之间来回拉扯......

背景

我们对 Flutter 技术的应用,不仅是在移动端APP,在我们的终端设备也用来做 OS 应用,跨Android、Windows、Linux系统。
在 Flutter 上,我们是有所沉淀的,但是当我们决定研发一款重要的PC应用时,依然产生了疑问:Flutter 这门技术,真的能满足我们在核心桌面应用的研发需求吗?
最终,基于官方能力、技术生态、roadmap等一系列原因,我们放弃在核心应用上使用 Flutter,转而代之选择了 Electron

这篇文章将从这几个月使用 Electron 的切实体验,从不同角度,对 FlutterElectron 这两款支持跨端桌面应用开发技术,做一个详细的对比。

Flutter VS Electron

维度FlutterElectron
发布时间2021 年 3 月 宣布支持桌面端2013 年 4 月发布,发布即支持
核心场景移动APP跨端桌面应用跨端
官方网站flutter.devwww.electronjs.org
开发文档docs.flutter.devwww.electronjs.org/docs
插件包管理Pub(pub.dev),提供大量 UI 组件、工具类库npm(www.npmjs.com),依赖前端生态,插件丰富(如 electron-builder 打包工具)
研发组织GoogleGithub

方案成熟度

毫无疑问,在方案成熟度上 Electron 是碾压 Flutter 的存在。

1. 多进程能力

  • Flutter 目前还是单进程的能力,只能通过创建 isolate 来实现部分耗时任务,但是内存也是不共享的。
  • Electron 集成了 Nodejs 服务,自带多进程的能力,且提供了完整的跨进程机制IPC「Inter-Process Communication」)。

2. 多窗口支持

  • Flutter 目前不支持多窗口。由于其是自绘引擎,本身还是依赖原生进程提供的桌面窗口,所以需要原生与 Flutter 引擎不断的进行沟通对接,才能很好的使用多窗口能力。
    目前官方只是提供了 demo 来验证多窗口的可行性,但截止发文还没有办法在公版试用。
  • Electron 将 Chromium 的核心模块打包到发行包中,借助浏览器的能力,可以随意开辟新的窗口(如: BrowserWindow

3. 开发语言

  • Flutter 使用dart语言开发,采用声明式UI进行布局,插件管理使用官方的 pub 社区,学习和使用成本不算高。
  • Electron 使用JavaScript/TypeScript + HTML/CSS 的前端技术栈进行开发,社区也完全跟前端一致,非常丰富但鱼龙混杂

4. 原生能力的支持

  • Flutter 本质是一个 UI 框架,原生能力需要通过编写插件去调用,或者通过 FFI 调用,成本是很高的,你很难找到一个懂多端原生技术的开发。
  • Electron 有 node 环境,node.js 很多原生模块,可以直接调用到系统的能力,非常的高效。

开发体验和技术生态

1. 调试工具

  • Flutter 的调试工具,主要是依赖 IDE 本身的断点调试能力,以及自研的Flutter Inspector、devTools。
    在UI定位、性能监控方面,基本可以满足。但由于是个 UI 框架,对于原生容器是无法进行调试的,这在混合开发过程中是个比较大的痛点。
  • Electron 就是个浏览器,对于主进程和node子进程,有 Inspect 的机制; UI 层就更方便了,就是浏览器的调试器一模一样。生产环境下调试成本也低。

2. 打包编译

Flutter 是通过自绘引擎生成原生应用包,而 Electron 是将网页技术(HTML/CSS/JS)包裹在 Chromium 内核中。

底层技术架构的区别,直接决定了 Electron 的打包相对 Flutter 有些困难,且包体积很大。

对比维度FlutterElectron
打包原理编译成目标平台的原生二进制代码,搭配自绘引擎(Skia)封装 Chromium 内核 + Node.js 环境,运行网页资源
最终产物与原生应用格式一致(如 .apk/.ipa/.exe)包含浏览器内核的独立应用包
跨平台方式一份代码编译成多平台原生包,需分别打包一份代码打包成多平台包,内核随应用分发
应用体积较小(基础包约 10-20MB)较大(基础包约 50-100MB,内核占主要体积)

3. 官方和社区的活跃性

  • Flutter 官方在桌面端的推进很慢,很多基础能力都没有太多的推进。同时在 roadmap 中,重心都偏向移动端和 web 端。
  • Electron 由于产品的体量和成熟度,稳定的在更新,每个版本都会带来一些新的特性。

4. 研发团队

技能维度FlutterElectron
核心语言Dart,需理解其异步逻辑、Widget 组件化思想JavaScript/TypeScript,前端开发者可无缝衔接
UI 技术Flutter 内置 Widget 体系,需学习其布局(Row/Column)、状态管理(Provider/Bloc)HTML/CSS,可复用前端生态(Vue/React/Element UI 等)
原生交互需了解 Android(Kotlin/Java)、iOS(Swift/OC)基础,复杂功能需写原生插件依赖 Node.js 模块或现成插件,无需深入原生开发
工程化工具依赖 Flutter CLI、Android Studio/Xcode(打包配置)依赖 npm/yarn、webpack/vite(前端构建工具)

可以看出,Flutter至少需要 1-2 名熟悉 Dart 的开发者,还需要有原生开发能力,技术门槛是比较高的;而 Electron 以前端开发者为主,熟悉 Node.js 即可完成所有开发,是可以快速上手的

同时前端开发也比 Flutter 开发要更容易招聘

结语

笔者本身是 Flutter 的忠实维护者,我认为 Flutter 的 Impeller 图形渲染引擎将不断完善,能在各个端达到更好的渲染速度和效果;同时 Flutter 目前的多窗口方案,让我们可以充分的相信可以多个窗口共用一份内存,而不需要通过进程间通信机制

但是,在 Flutter 暂未成熟的阶段,桌面核心产品还是用 Electron 进行开发会更加合适。我们 也期待未来 Electron 可以多集成WebAssembly来提升计算密集型任务的性能,减少 Chromium 内核的高内存占用。


桌面应用开发,Flutter 与 Electron如何选》 是转载文章,点击查看原文


相关推荐


【Rokid+CXR-M】基于Rokid CXR-M SDK的博物馆AR导览系统开发全解析
IF'Maxue2025/11/29

智眸鉴宝:基于Rokid CXR-M SDK的博物馆AR导览系统开发全解析 摘要 本文详细阐述了如何利用Rokid CXR-M SDK开发一款面向博物馆场景的AR智能导览系统。该系统通过AI眼镜与手机端协同工作,实现了展品自动识别、深度文化解读、多语言实时翻译、个性化导览路线推荐等核心功能。文章从技术架构设计入手,深入剖析了设备连接、AI场景定制、自定义界面开发、媒体交互等关键模块的实现细节,并提供了完整的核心代码示例。通过本系统的开发实践,为文博数字化转型提供了可落地的技术方案,也为开发者


W55MH32 单芯片以太网方案:破解分布式 IO 三大痛点
玩转以太网2025/11/26

在工业4.0时代,分布式I/O已成为智能边缘节点,但其开发常受困于协议兼容难、实时性差、开发周期长三大痛点。W55MH32作为一款高度集成的芯片,内置硬件TCP/IP引擎(TOE)和Cortex-M3内核,以单芯片方案替代复杂的“MCU+外设”组合,成为打造高可靠、易扩展分布式I/O 模块的核心基石。本文旨在深度剖析如何利用W55MH32,构建一款在性能、成本与开发效率上取得最佳平衡的分布式I/O方案。 工业自动化架构的演进与分布式IO的新需求 工业自动化系统正从 “中央集权” 向 “边缘自


SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)
k***85842025/11/24

文章目录 1.整合MyBatis 1.需求分析2.数据库表设计3.数据库环境配置 1.新建maven项目2.pom.xml 引入依赖3.application.yml 配置数据源4.Application.java 编写启动类5.测试6.配置类切换druid数据源7.测试数据源是否成功切换 4.Mybatis基础配置 1.编写映射表的bean2.MonsterMapper.java 编写mapper接口3.MonsterMa


推荐个C++高性能内存分配器
程序喵大人2025/11/22

博主介绍:程序喵大人 35 - 资深C/C++/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C++20高级编程》《C++23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇👇记得订阅专栏,以防走丢👇👇 😉C++基础系列专栏 😃C语言基础系列专栏 🤣C++大佬养成攻略专栏 🤓C++训练营 👉🏻个人网站 在现代多线程应用程序中,高效的内存管理至关重要。Google开发的TCMalloc(T


Redis(137)Redis的模块机制是什么?
Victor3562025/11/21

Redis 模块机制允许开发者扩展 Redis 的功能,通过编写动态加载的模块,可以向 Redis 添加新的命令、数据类型、事件处理器等。Redis 模块机制提供了一套 C 语言 API,开发者可以基于这些 API 实现自己的模块。 核心概念和数据结构 1. Redis 模块 API Redis 提供了一套模块 API,主要通过 redismodule.h 头文件定义。开发者需要包含该头文件并使用其中的函数和宏来实现模块。 2. 模块结构 每个模块需要定义一个 RedisModuleCtx 结构


C语言-----扫雷游戏
Ravi_12025/11/19

扫雷游戏的功能说明 : • 使⽤控制台实现经典的扫雷游戏 • 游戏可以通过菜单实现继续玩或者退出游戏 • 扫雷的棋盘是9*9的格⼦ • 默认随机布置10个雷 • 可以排查雷: ◦ 如果位置不是雷,就显⽰周围有⼏个雷 ◦ 如果位置是雷,就炸死游戏结束 ◦ 把除10个雷之外的所有⾮雷都找出来,排雷成功,游戏结束 test.c //⽂件中写游戏的测试逻辑 game.c //⽂件中写游戏中函数的实现等 game.h //⽂件中写游戏需要的数据类型和函数声明等 逻辑开始: 一、菜单 输入1进入游戏,输入


R语言在线编译器 | 提供快速便捷的编程环境,助力数据分析与学习
hyiciw_6422025/11/18

三十岁学编程:是挑战还是机会?|掌握编程技术,开启全新职业之路三十岁学编程,很多人可能会觉得自己已经不再适合入门这项技能。尤其在传统观念中,编程被视为年轻人的专属领域。然而,随着科技的不断发展,编程技能已经成为一种基础能力,甚至有着广阔的职业前景。对于三十岁的人来说,学习编程不仅是个人成长的一部分,更是迈向新职业的第一步。首先,三十岁的人在学习编程时,能够依靠自己丰富的生活经验与工作经历,这些都可以帮助他们更快地理解技术背后的应用场景。例如,对于在管理或市场领域工作的人来说,编程可以让他们更好地


C#.NET 全局异常到底怎么做?最完整的实战指南
唐青枫2025/11/17

简介 全局异常拦截是构建健壮企业级应用的关键基础设施,它能统一处理系统中未捕获的异常,提供友好的错误响应,同时记录完整的异常信息。 背景和作用 在 ASP.NET Core 应用中,异常可能在控制器、数据库操作或中间件中发生。如果每个动作方法都手动处理异常(如 try-catch),代码会变得冗长且难以维护。全局异常拦截器解决了以下问题: 统一错误处理:集中捕获所有未处理异常,返回标准化的错误响应。 标准化响应:符合 RESTful API 规范(如 RFC 7807 Problem D


c文件编译
芝麻馅汤圆儿2025/11/16

随笔记录 目录 1.背景 2. 编译 2.1 创建 .c 文件 2.2 编译->执行 1.背景 c文件在编译为可执行程序 2. 编译 2.1 创建 .c 文件 已知c 文件源码,创建 .c 文件并编译为可执行程序 1. creat *.c 文件 [root@localhost magx]# vim udp_nobind_sendto.c [root@localhost magx]# [root@localhost magx]# cat udp_nobind_


一句话把 Excalidraw 跑起来?SOLO Coder 把我以前踩过的坑都帮我填了
不惑_2025/11/14

Excalidraw 是一个开源、类手绘风格的虚拟白板工具,支持无限画布、暗色模式、图形库、导出 PNG/SVG、自由绘制、多语言、快捷键与绑定箭头等丰富能力。其官方应用原生支持 PWA 离线、本地优先存储、纯前端架构,非常适合私有化部署或内网使用。 要是你之前动手部署过开源项目,你应该懂那种感觉:教程看着简单,结果一动手就开始打怪,git clone → 解压 → 安装依赖 → 处理网络代理 → 启动服务 → 校验端口 → 本地预览。而这些步骤每一步都可能踩到网络、依赖、端口占用等坑。我以前搭

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读