Flutter 桌面支持

桌面支持可以让你的 Flutter 代码编译成 Windows、macOS 或 Linux 的原生桌面应用。 Flutter 的桌面支持也允许插件拓展— 你可以使用已经支持了 Windows、macOS 或 Linux 平台的插件,或者创建你自己的插件来实现功能。

要求

要能够编译桌面应用,你必须 在特定的平台 上编译应用: 在 Windows 上构建 Windows 应用,在 macOS 上构建 macOS 应用,在 Linux 上构建 Linux 应用。

要创建一个支持桌面的 Flutter 应用,你需要以下的软件:

Windows 的额外要求

要开发 Windows 桌面程序,除了 Flutter SDK,你还需要做以下准备:

  • Visual Studio 2022Visual Studio 2022 生成工具 在选择安装 Visual Studio 时或只安装生成工具的时候,你需要选择「使用 C++ 的桌面开发」,包括其所有默认组件,以安装必要的 C++ 工具链和 Windows SDK 的头文件。

macOS 的额外要求

要开发 macOS 桌面程序,除了 Flutter SDK,你还需要做以下准备:

  • 完整安装版本的 Xcode,不能只是安装了命令行工具的那种

  • 如果使用插件,需要安装 CocoaPods

Linux 的额外要求

要开发 Linux 桌面程序,除了 Flutter SDK,你还需要做以下准备:

安装 Flutter SDK 和这些依赖,最简单方式的方式是使用 snapd。更多详细信息,可以查看 安装 snapd

安装 snapd 后,你就可以使用 Snap Store 安装 Flutter,也可以在命令行进行安装:

$ sudo snap install flutter --classic

如果你在使用的 Linux 发行版上无法使用 snapd,你可以使用下面的命令行:

$ sudo apt-get install clang cmake git ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev

创建一个新项目

你可以通过下列步骤,来创建一个支持桌面的新项目。

配置步骤

你可以运行 flutter doctor 来查看是否存在未解决的问题。每一个成功的配置都有一个对勾,比如在 Windows 上你可能会看到如下内容:

C:\> flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.0.0, on Microsoft Windows [Version 10.0.19044.1706], locale en-US)
[✓] Chrome - develop for the web
[✓] Visual Studio - develop for Windows (Visual Studio Professional 2022 17.2.0)
[✓] VS Code (version 1.67.2)
[✓] Connected device (3 available)
[✓] HTTP Host Availability

• No issues found!

在 macOS 上,你可能会看到如下内容:

[✓] Xcode - develop for iOS and macOS

Linux 平台,你可能会看到如下内容:

[✓] Linux toolchain - develop for Linux desktop

在执行 flutter doctor 命令时如果发现有不需要支持的平台的问题或者组件缺少报错等提示,你可以忽略这些警告,或者使用 flutter config 命令来禁用这个平台,比如:

$ flutter config --no-enable-ios

其他可用的参数:

  • --no-enable-windows-desktop
  • --no-enable-linux-desktop
  • --no-enable-macos-desktop
  • --no-enable-web
  • --no-enable-android
  • --no-enable-ios

加入了桌面端支持之后,请重启你的 IDE,然后 IDE 就能检测到新的设备了。

创建和运行

创建一个桌面支持的新项目,与在其他平台 创建新的 Flutter 项目 没什么不同的地方。

一旦配置好了桌面支持的环境,你可以通过 IDE 或命令行创建和运行桌面程序。

使用 IDE

在你配置好桌面支持的环境后,记得重启已经在运行的 IDE。

在你的 IDE 中创建新应用时,它会自动创建 iOS、 Android 和应用的桌面版本。从设备的下拉选项中,选择 windows (desktop)macOS (desktop)linux (desktop) 然后运行你的应用,就会看到应用在桌面启动。

使用命令行

想要创建一个包含桌面支持的新应用(除了支持移动和 Web),请运行下面的命令,将 my_app 替换成你项目的名称:

$ flutter create my_app
$ cd my_app

想要从命令行启动你的应用,可以在根目录执行以下命令之一:

C:\> flutter run -d windows
$ flutter run -d macos
$ flutter run -d linux

创建 release 版本的应用

要生成 release 版本,可以运行以下命令之一:

PS C:\> flutter build windows
$ flutter build macos
$ flutter build linux

为已有的应用添加桌面支持

想为已有的 Flutter 项目添加桌面支持,你可以从项目根目录在控制台运行下面命令:

$ flutter create --platforms=windows,macos,linux .

这将会在你的 Flutter 桌面项目中添加必要的已有文件和文件夹。如果需要只添加特定平台桌面端的支持,修改 platforms 的值为你想要支持的平台即可。

插件支持

Flutter 在桌面支持中使用和创建插件。使用支持桌面端的插件,可以根据文档 在 Flutter 里使用 Packages 中描述的内容进行操作。 Flutter 会像在其他平台中一样的操作,自动将需要的原生平台代码加入到你的工程中。

编写一个插件

当你开始构建自己的插件时,你需要记住联合。联合是定义几个不同包的能力,其中每个包都针对不同的平台,将它们合并到一个插件中,这样方便开发人员使用。比如,Windows 实现的 url_launcher,实际是通过 url_launcher_windows 完成的,但是 Flutter 开发者可以在 pubspec.yaml 中,简单地添加 url_launcher 包作为依赖,在构建过程中会基于目标平台引入正确的实现。联合非常方便,因为具有不同专长的不同团队,可以为不同的平台构建相应的插件实现。与原插件作者协调之后,你可以为 pub.dev 上任何联合插件添加新的平台实现。

想要了解更多信息,包括关于已支持的插件信息,请参阅以下资源:

Codelab 和 Flutter 文档

构建一个 Flutter 桌面程序
这个 codelab 会引导你通过使用 Flutter,来构建一个集成 GitHub GraphQL API 的桌面应用。

你可以运行下面的桌面应用案例,也可以下载并阅读源代码,以了解更多关于 Flutter 桌面支持的信息。

Wonderous 应用 在线访问源代码仓库地址
这是一款使用 Flutter 创建的应用,它拥有极具表现力的用户界面。 Wonderous 专注于提供可访问的高质量用户体验,同时包含引人入胜的交互体验以及新颖的动画效果。如果你想要将 Wonderous 作为桌面应用运行,你可以克隆该项目,并按照 README 中的说明进行体验。

Flokk 官宣文章源代码仓库地址
一款集成了 GitHub 和 Twitter 的谷歌联系人管理器应用。可以从你的 Google 账户同步数据,导入联系人信息,并管理它们。

图片搜索应用
使用支持桌面端的插件构建的一个桌面应用案例。