Flutter 桌面支持
桌面支持可以让你的 Flutter 代码编译成 Windows、macOS 或 Linux 的原生桌面应用。 Flutter 的桌面支持也允许插件拓展— 你可以使用已经支持了 Windows、macOS 或 Linux 平台的插件,或者创建你自己的插件来实现功能。
要求
要能够编译桌面应用,你必须 在特定的平台 上编译应用: 在 Windows 上构建 Windows 应用,在 macOS 上构建 macOS 应用,在 Linux 上构建 Linux 应用。
要创建一个支持桌面的 Flutter 应用,你需要以下的软件:
-
Flutter SDK,查看 Flutter SDK 安装说明。
-
可选项:一个支持 Flutter 的 IDE。你可以安装 Android Studio、 IntelliJ IDEA 或 Visual Studio Code,并且需要 安装 Flutter 和 Dart 插件。这些插件可以使 IDE 支持 Dart 语言,也为你提供了一些工具,如重构、允许、调试和重载桌面应用。详情请查看 配置一个编辑器。
Windows 的额外要求
要开发 Windows 桌面程序,除了 Flutter SDK,你还需要做以下准备:
-
Visual Studio 2022 或 Visual Studio 2022 生成工具 在选择安装 Visual Studio 时或只安装生成工具的时候,你需要选择「使用 C++ 的桌面开发」,包括其所有默认组件,以安装必要的 C++ 工具链和 Windows SDK 的头文件。
macOS 的额外要求
要开发 macOS 桌面程序,除了 Flutter SDK,你还需要做以下准备:
Linux 的额外要求
要开发 Linux 桌面程序,除了 Flutter SDK,你还需要做以下准备:
- Clang
- CMake
- GTK development headers
- Ninja build
- pkg-config
- liblzma-dev This dependency may be required
安装 Flutter SDK 和这些依赖,最简单方式的方式是使用 snapd。更多详细信息,可以查看 安装 snapd。
安装 snapd
后,你就可以使用 Snap Store 安装 Flutter,也可以在命令行进行安装:
$ sudo snap install flutter --classic
如果你在使用的 Linux 发行版上无法使用 snapd
,你可以使用下面的命令行:
$ sudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev
创建一个新项目
你可以通过下列步骤,来创建一个支持桌面的新项目。
配置步骤
Flutter 2.10 以及更高版本中加入了对 Windows 操作系统的桌面端支持。 mac OS 和 Linux 的桌面端支持需要使用 Flutter 3 及更高版本。
你也可以运行 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 上任何联合插件添加新的平台实现。
想要了解更多信息,包括关于已支持的插件信息,请参阅以下资源:
-
如何写一个 Flutter web 插件,第 2 部分,介绍联合插件的结构,并包含适用于桌面插件的信息。
-
现代 Flutter 插件开发 介绍了最近对 Flutter 插件支持的增强。
Codelab 和 Flutter 文档
构建一个 Flutter 桌面程序
这个 codelab 会引导你通过使用 Flutter,来构建一个集成 GitHub GraphQL API 的桌面应用。
你可以运行下面的桌面应用案例,也可以下载并阅读源代码,以了解更多关于 Flutter 桌面支持的信息。
Flutter Gallery 线上运行的 Web 应用,源代码仓库地址
一个托管在 GitHub 上案例项目,可以用来帮助开发人员评估和使用 Flutter。
Gallery 的构成部分有:Material design widgets 的集合、
behaviors 和用 Flutter 实现的 vignettes。你可以克隆该项目,并按照 README 中的说明,将 Gallery 作为桌面应用程序运行。
Flokk 官宣文章,源代码仓库地址
一款集成了 GitHub 和 Twitter 的谷歌联系人管理器应用。可以从你的 Google 账户同步数据,导入联系人信息,并管理它们。
图片搜索应用
使用支持桌面端的插件构建的一个桌面应用案例。