第8章 Flutter Windows Alpha 版正式发布:原生编译、早期插件支持与桌面版 Gallery
Announcing Flutter Windows Alpha 原生 Windows 应用编译、早期插件支持以及桌面级 Flutter Gallery 应用 Chris Sells 2020 年 9 月 23 日 · 12 分钟阅读 rss_feed 在 X 上分享 在 Bluesky 上分享 在 LinkedIn 上分享 我们的使命是向开发者提供一个开源、高生产力的框架,用于在任何平台上构建美观的原生应用。目前,我们已为 Android 和 iOS 提供了生产级的支持,发布了 8 个稳定版本,仅 Google Play 商店上就有超过 10 万个应用。我们持续拓展支持的平台范围,包括 Web、macOS 和 Linux。今天,我们很高兴宣布 Flutter 新增的支持目标:Windows 版 Flutter 的 Alpha 版本现已发布。 Windows 在桌面和笔记本设备中仍是非常受欢迎的选择,微软报告称有超过 10 亿台活跃设备运行 Windows 10。我们的统计数据显示,超过半数的 Flutter 开发者使用 Windows,因此它是 Flutter 的自然目标平台。原生桌面支持为 Flutter 打开了许多令人兴奋的可能性,包括改进的开发者工具、降低新用户的入门门槛,以及让单一代码库能够覆盖用户拥有的各类设备。 为 Flutter 添加 Windows 支持 如我们的架构概所述,Flutter 是一个跨平台 UI 工具包,旨在实现代码在 iOS 和 Android 等操作系统间的复用,同时允许应用直接与底层平台服务交互。其目标是让开发者能够交付高性能应用,使其在不同平台上都感觉自然。在拥抱平台差异的同时,尽可能多地共享代码。Flutter 的核心是引擎,它支持所有 Flutter 应用所需的原语。引擎负责在需要绘制新帧时对合成场景进行光栅化。它提供了 Flutter 核心 API 的底层实现,包括图形、文本布局、文件和网络 I/O、无障碍支持、插件架构,以及 Dart 运行时和编译工具链。 每为 Flutter 添加一个新平台,都会扩展核心框架以引入新服务,使其在该平台上表现优异。我们最初在 Android 和 iOS 上以 Material Design 为基础,并设计了一个基于触摸、以移动为中心的用户界面,旨在在两个移动平台上实现像素级完美。增加对 Web、Windows、macOS 和 Linux 等桌面形态的支持,带来了一整套新的服务,包括对输入端的键盘、鼠标、滚轮和控制器提供更稳健的支持,以及能够自适应或在 Web 和桌面应用更大的屏幕尺寸下表现最佳的控件。 此外,每个新平台不仅影响 Flutter 框架和引擎,还影响许多其他方面: 工具链更新:在 CLI 和 IDE 工具中添加新的目标(此处为 Windows) Shell:通过 WM_* 消息处理来自 Windows 的输入,并通过使用 Skia 的 ANGLE 以原生速度渲染到底层 DirectX 表面 Runner:每个项目都会为支持的目标生成一个 shell 应用程序。对于 Windows,这是一个 Win32/C++ 程序,它在运行时加载并执行你的 Flutter 代码。如果需要,这也是向应用添加原生代码的好地方。 插件:插件是 Dart 代码和插件支持的每个平台的原生代码的混合体。编译到 Windows 上 Flutter 应用中的每个插件都需要添加相应的原生代码。 这个 Alpha 版本提供了一个坚实的基础,我们将在未来几个月内使其稳定。通过支持 Windows 7 及以上版本,我们希望为喜欢尝鲜的开发者提供一个起步机会。 探索一些示例应用 想看看 Flutter 在 Windows 上的实际表现吗?你可以尝试我们创建的一些在 Windows 上运行良好的示例应用。第一个是 Flokk 应用,它与 gskinner.com 的设计师和开发者合作开发。目标是创建一个创新且美观的 Flutter 桌面应用,以证明 Flutter 已准备好进入桌面领域。Flokk 是一个与你的真实 Google 联系人数据交互,并展示联系人在 GitHub 和 Twitter 上活动的应用。 如果你想在 Windows 机器上使用 Flokk 应用,可以从 GitHub 下载最新发布的版本。如果你想了解 gskinner 是如何构建这个应用的,请参阅他们优秀的博客文章: Flokk — 我们如何使用 Flutter 构建桌面应用。 此外,Flutter Gallery 应用——我们展示所有 Flutter 功能的展示应用——最近完全重写以添加对桌面形态的支持。这让我们能够确保它在 Web 以及 Windows、macOS 和 Linux 上运行良好。 Gallery 中的许多研究展示了我们在用 Flutter 设计自己的 Windows 应用时推荐的多种应用风格。当你找到喜欢的功能时, 代码在 GitHub 上可用。 开始使用 Windows 版 Flutter 按照 Windows 安装说明安装 Flutter SDK 即可开始。要针对 Windows 桌面,首先需要 安装桌面文档中描述的工具。默认情况下,Flutter 假设你在构建生产软件,并未配置开发 Windows 应用。不过,可以通过命令行轻松修复: bash $ flutter channel dev $ flutter upgrade $ flutter config --enable-windows-desktop
第一条命令将 Flutter 设置为使用实验质量的 “dev” 通道(而不是默认的 “stable” 通道)。这允许你使用仍处于 Alpha 阶段的平台支持,如 Windows。第二条命令拉取该通道上的最新代码。第三条命令在你的电脑上启用 Windows 应用开发。 设置完成后,每次创建新的 Flutter 应用时,无论是通过 Android Studio 或 Visual Studio Code 的扩展支持,还是从命令行,都会创建一个 windows 子文件夹。 如果你好奇,在 Windows 上运行默认应用的效果如下: 最后,一旦创建好应用,构建它会生成一个发布模式的原生 EXE 文件以及必要的支持 DLL。此时,如果你想在一台没有安装 Flutter 的 Windows 10 机器上试用你的新 Windows 应用,可以 按照步骤将必要的文件打包并运行。 Windows 插件 虽然我们刚发布 Alpha 版本,但 Flutter 社区已经在为 Windows 开发插件了。以下是一些示例: url_launcher:从应用中在浏览器中打开 URL path_provider:查找用户机器上特殊目录的路径,如文档或临时文件夹 shared_preferences:在应用会话之间将用户偏好设置序列化保存在磁盘上 biometric_storage:使用生物特征进行加密存储 flutter_audio_desktop:在桌面应用中播放音频 使用这些插件的好处是,它们大多数也支持其他 Flutter 平台,这使得你可以将应用部署到 Android、iOS、Web 等以及 Windows 上。此外,尽管 pub.dev(Dart 和 Flutter 的包管理器)上约三分之一的可用包是包含平台特定代码的插件,但大多数不是。例如, 许多最高质量和最常用的包是 Flutter Favorite 项目的一部分,它们中的大多数在 Windows 上也能工作。如果你想查看在 Windows 上运行的完整包列表,可以 在 pub.dev 上运行此查询。 与 Windows 互操作 如果你想为 Windows 构建自己的插件,那是可以的。一旦你在 dev 通道上启用了 Windows,就可以使用以下命令开始: bash $ flutter create --template plugin --platforms windows hello_plugin
此时,你可以将 Flutter 代码添加到 lib 子文件夹,将 Windows 代码添加到
windows 子文件夹。你将使用
Platform Channels 在两个栈之间通信,这本质上是 Dart 和 C++ 代码之间的消息传递。关于此的精心设计的示例,
请参阅 url_launcher 的实现。
然而,Platform Channels 并非与 Windows 互操作的唯一选择。如果你愿意,可以使用
Dart FFI(外部函数接口)
来加载库并调用 C 风格 API,如 Win32 API。与使用 Platform Channels 的 url_launcher 不同,path_provider 插件是使用 FFI 实现的,你可以从
GitHub 仓库中看到。FFI 允许你编写代码直接导入你想要的 API,而不是在 Dart 和 C++ 之间来回切换。例如,以下是调用 MessageBox API 的代码:
dart
typedef MessageBoxNative = Int32 Function(
IntPtr hWnd,
Pointer
这段代码不会像 Platform Channels 那样在两个线程之间切换时产生开销。FFI 支持许多不同类型的 API,包括 Win32、WinRT 和 COM。但在你开始包装整个基于 C 的 Windows API 之前,请查看 win32 插件,它已经在这方面取得了很好的进展。事实上, path_provider 插件本身也是使用 win32 插件实现的。关于 win32 插件的开发细节和工作原理,请参阅博客文章, Windows fun with Dart FFI。 Windows 版 Flutter 资源 无论你处于 Windows 版 Flutter 旅程的哪个阶段,都务必阅读 flutter.dev 上的桌面文档,其中包含最新详情。你还可以体验 Flutter 用于编写针对 Windows、macOS 和桌面目标的应用的 codelab,其中包含 OAuth 身份验证、访问 GitHub API 和使用 GraphQL 等真实场景的代码。或者,看看另一个在 Windows 上工作的 Flutter 桌面代码的优秀示例, 查看 Photo Search 示例。 它使用标准的 Windows 文件打开对话框、树视图控件、分隔条控件,并将结果与真实的 REST API 集成。 对于其他有用的面向桌面的控件,我们推荐 menubar 插件、 NavigationRail 控件和 DataTable 控件。你可能也会对 InteractiveViewer 控件感兴趣,它完全支持桌面鼠标手势来平移和缩放子控件。 另一个值得探索的有用控件集合来自 SyncFusion,他们在 Windows 开发社区中已经很有名。他们提供广泛的、企业级质量的控件,用于创建图表、仪表、数据网格等。 这些控件提供社区和企业许可,你可以找到适合项目的选项。 野外的 Windows 版 Flutter 除了针对 Windows(以及更广泛的 Flutter 桌面)的包和插件外,Flutter 开发者还在构建针对 Windows 的优秀应用,例如来自 Invoice Ninja 的这个实验性构建: Invoice Ninja 是一家依赖 Flutter 获取收入的发票公司。他们目前针对 Android 和 iOS 进行生产环境部署,并 提供基于 Web 的演示供你试用,但也在展望提供桌面版本。 “在 Invoice Ninja,过去我们支持纯 Web 和移动应用时遇到了困难,一度维护三个独立的代码库。借助 Flutter,尤其是最近的 Flutter Desktop,我们已能用单一代码库为所有主要平台构建应用。我们不仅基本免费获得了应用的桌面版本,而且它的性能是所有版本中最好的!” — Hillel Coren,Invoice Ninja 联合创始人 如果你对在移动端和桌面端都工作的、真实世界产生收入的 Flutter 应用的实现感兴趣, 源代码在 GitHub 上可用。 Aartos 是另一家正在构建优秀事物的公司,包括一个使用 用 Flutter 编写多平台客户端的实时无人机检测系统。这是 Windows 客户端早期版本,旁边运行着移动客户端: 在 YouTube 新标签页中观看:"Aartos 的 Flutter 客户端应用,桌面 + 移动" 这两个版本,分别针对 iOS 和 Windows,共享完全相同的代码库。 如果你是一位经验丰富的 Flutter 开发者,并发现自己需要在不同版本的 Flutter 之间切换;例如,一个版本用于发布你的生产移动应用,另一个版本用于实验 Windows Alpha 版,那么你可能会欣赏 Flutter 版本管理器(FVM),它现在带有 可下载的 Windows GUI。 在 YouTube 新标签页中观看:"适用于 Windows 的 FVM 应用" 该工具是开源的,因此你可以亲自看看 Leo 是如何让它看起来如此出色的。 接下来是什么 既然我们已经发布了 Alpha 版,我们的注意力将转向完成功能集并使产品稳定以供发布。作为一个开源项目,你可以在我们的 GitHub 站点上跟踪 向 Beta 版进展,剩余的工作包括无障碍、全球化和本地化、增强键盘和文本处理、支持命令行参数等。 除了支持经典的 Win32 API,我们还在实验基于 UWP 的 Flutter shell 版本,这使得 Flutter 能够触及更广泛的基于 Windows 的设备,包括 Xbox。作为该实验的一部分,本周我们向 Windows 商店发布了基于 UWP 的 Flutter Gallery。 以下截图显示了基于 UWP 的 Flutter Gallery 在 Xbox 上运行的情况: 这里是同一个应用在运行 Windows 10X 模拟器上的双屏 Windows 设备上的样子: 你可以在 GitHub 上阅读更多关于 Flutter 对 UWP 支持进展的信息。 总结 通过这个版本,我们将 Flutter 的强大功能带到 Windows,包括其声明式、可组合、反应式框架以提升开发者生产力,可自适应的 Material 规范实现以让你能够定制应用的外观和感觉,以及完整的 Flutter 开发和调试工具集。完成后,你的应用被编译为原生 64 位代码,你可以像任何其他原生应用一样打包并带到其他 Windows 机器上。最后,你可以使用相同的代码库创建针对 Android、iOS、Web、macOS 和 Linux 的应用。 如果你想开始使用 Flutter 构建 Windows 应用,我们非常希望得到你的反馈!如果你更喜欢利用你的 Windows 专业知识 构建流行插件的 Windows 实现,或者为 Flutter 构建一些以 Windows 为中心的工具(也许是一个从 flutter build windows 命令输出创建 MSIX 的 CLI…),我们也表示欢迎! 有了 Flutter 对 Windows 的新支持,你打算构建什么? 更多来自 Flutter 宣布 Genkit Dart 1.0:使用 Dart 和 Flutter 构建生产级代理应用 宣布 Genkit Dart 1.0 稳定版,这是一个开源框架,用于使用 Dart 和 Flutter 构建 AI 支持的功能和代理工作流。 Chris Gill 2026 年 10 月 8 日 · 6 分钟阅读 Material 和 Cupertino 解绑已到来 将 Material 和 Cupertino 从核心 Flutter 移出如何加速修复和新功能开发 Craig Labenz 2026 年 9 月 9 日 · 4 分钟阅读