Google一直致力于使Flutter成为一种通用工具,以创建引人入胜的界面,使其在任何平台上都能像这些平台的本机应用程序一样快速地工作。为了确保做到这一点,我们首先将精力集中在Android和iOS等移动平台上。结果,在Google Play上发布了80,000多个快速,美观的Flutter应用程序。

基于我们的成功,一年多来我们一直在忙于将Flutter的功能扩展到台式机平台-macOS,Windows和Linux。这适用于Web应用程序和传统的桌面项目。特别是,我们正忙于引擎的严重重构。重构旨在支持与台式机系统相同样式的鼠标和键盘工作,并支持可调整大小的窗口。这包括适用于桌面平台的新用户界面功能。例如,这支持Material Density和NavigationRail。多亏了Dart:FFI,其中包括与桌面操作系统进行深度集成的实验,并使用系统菜单和标准对话框。所有这些都是为了确保Flutter不仅适合创建移动项目,而且还准备在其基础上开发实际的桌面应用程序。
长期以来,我们一直将Flutter视为创建针对各种平台的项目的工具。在Google,这种愿景的表达是通过Assistant等项目来表示的。现在,我们很高兴看到其他公司将Flutter支持扩展到新平台。今天,谷歌和维护世界上最受欢迎的Linux发行版Ubuntu的Canonical高兴地共同宣布发布Flutter Alpha版Linux版。
Linux Flutter?
去年,当Google宣布可以使用Flutter开发桌面应用程序时,Canonical看到了一个诱人的机会来制作Linux发行版,其中包括对Flutter开发人员有吸引力的目标平台Ubuntu。 Flutter在跨平台功能方面正在迅速向前发展。 Canonical希望站在这一运动的最前沿。通过帮助Flutter支持Linux应用程序,Canonical为Flutter应用程序开发人员提供了一种非常简单的机制来将其工作发布到Linux应用程序商店Snap Store。通过使Linux成为正式支持Flutter应用程序的平台,Canonical为开发人员提供了向数百万Linux用户展示其项目并扩大优质项目数量的机会。可供此类用户使用。
Flutter的以下功能和该框架的生态系统似乎对Canonical尤其有吸引力:
- 一个快速发展的应用程序开发人员社区。
- 支持多种平台。
- 开发经过优化的本机应用程序的能力。
- 现代UI框架共有的功能,例如对声明式,反应式布局小部件的支持。
- 使用VS Code,Android Studio和IntelliJ的丰富应用程序开发环境。
Google在Flutter上有关桌面开发的原始帖子处理了一个支持macOS应用程序的alpha版本,并计划支持Linux和Windows应用程序。Canonical拥有一支专门的开发团队,在Flutter的开发方面进行了重大投资,该团队与Google的开发人员合作,旨在确保大多数Linux发行版的用户都能享受所有便利的Flutter应用程序。Canonical将继续与Google合作,以进一步改善Linux支持,并将Linux上Flutter应用程序可用的功能保持与其他平台相同的水平。
Flokk App-Flutter证明可用于桌面开发
为了表明Flutter已准备好进行移动开发,我们与gskinner的设计师和开发人员合作,创建了一种创新且引人入胜的Flutter桌面应用程序。这是Flokk-一个处理真实数据的真实应用程序。特别是-带有Google通讯录中的联系人列表。这是Flokk的视频演示。
此应用程序允许您管理联系人。特别是-搜索联系人,添加新联系人并编辑现有联系人。 Flokk还允许您与联系人关联适当的Twitter和GitHub帐户,并使用这些帐户中的数据。

Flokk Contacts是在Flutter上为台式机构建的。
该应用程序可以显示来自Twitter和GitHub的通知,这一事实将其转变为用户的个人社交网络。如果您感兴趣的社交网络尚未与Flokk集成,则可以通过将相应的PR发送到项目存储库中来解决此问题,因为Flokk是完全开源的项目。
除了为用户交互提供创新思路外,Flokk还使用Flutter的功能来创建有吸引力且用户友好的界面。下图显示了这种可能性的一个示例。此处显示,当切换到应用程序的深色主题时,执行的不是简单的而是动态的颜色更改。

Flutter的功能使Flokk可以提供流畅的动画,高性能的滚动以及易于使用的主题
Flokk背后的创意团队由Grant Skinner领导他以出色的设计解决方案和创新的UX理念而闻名。格兰特(Grant)关于在Linux上使用Flutter的看法是这样的:“开发Flokk Contacts应用程序原来是一项非常简单的任务!我们能够在这里应用我们所有的Flutter开发经验,并且无需诉诸任何特殊技巧就可以创建针对Linux的应用程序。该应用程序非常好。我们非常喜欢与Canonical团队合作。他们对我们的业务充满热情和热情,他们希望不仅考虑Linux,而且考虑所有其他平台,从而使Flutter更好。这是一个伟大的项目,我非常喜欢为其他桌面操作系统开发Flutter应用程序的前景。”
如果您想在Linux机器上使用Flokk,则可以从GitHub下载该应用程序的最新版本。如果使用snapd,则可以从Snap Store下载Flokk 。
在Linux上安装Flutter
既然您已经了解了可以使用Flutter创建的高质量桌面应用程序,特别是Linux应用程序,那么您可能想在自己的Linux机器上尝试Flutter。为了尽可能简化为开发Flutter应用程序准备Linux系统的过程,我们很高兴地宣布Flutter SDK for Linux作为Snap软件包在Snap Store中提供。...该软件包包含使用您喜欢的Linux发行版开发Flutter应用程序所需的一切。话虽如此,您无需安装一整套开发依赖项。您需要做的就是安装您选择的Flutter SDK和IDE snap软件包。然后,您拥有创建,构建和发布自己的Linux应用程序所需的一切。
例如,如果您要开始在Linux上开发Flutter应用程序,并且喜欢Visual Studio Code,则需要在终端中运行以下命令集:
$ snap install --classic flutter
$ snap install --classic code
$ code --install-extension dart-code.flutter
如果要在Linux上创建桌面和移动应用程序,可以通过安装Android SDK或Android Studio(此处已包含Android SDK)进行准备。您可以在此处找到有关Flutter SDK snap的详细信息。
Linux桌面应用程序开发
在Linux计算机上安装Flutter SDK之后,您需要转到某个频道
dev
或master
更新Flutter以创建桌面应用程序。然后,您需要启用对Linux桌面应用程序的支持:
$ flutter channel dev
$ flutter upgrade
$ flutter config --enable-linux-desktop
现在,当您创建一个新的Flutter项目时,将有一个子目录
linux
,可让您在Linux上运行该应用程序:
$ flutter create counter
$ cd counter
$ flutter run -d linux

著名的Flutter Counter应用程序在Linux上
也能很好地工作,您将拥有一个使用Flutter构建的全新Linux应用程序,并在最新的稳定版GTK +上运行。如果您已经有想要支持Linux的Flutter项目,并且已经在此类项目中启用Linux支持之后执行了此操作,则可以将目录
linux
自己添加到项目中:
$ cd my_flutter_app
$ flutter create .
这将创建一个带有特殊项目的子目录,该子目录是在Linux桌面上构建和运行Flutter应用程序所需要的。
安排从Flutter访问本机Linux代码
除了通过编写Dart代码以创建Flutter小部件来支持桌面应用程序之外,您的Linux桌面应用程序还可以使用平台通道或C / C ++的外来功能接口(FFI)访问本机Linux功能。...或者,如果愿意,可以重用可以在pub.dev中找到的现有代码。,在Dart和Flutter的软件包管理器网站上。在pub.dev上找到的大多数软件包都是用纯Dart编写的,这些软件包中的大多数在Linux应用程序中都可以正常工作。一些称为插件的软件包包含针对特定平台的本机代码。作为此发行版的一部分,我们在pub.dev上发布了三个使用本机Linux功能的插件:
- url_launcher:在默认浏览器中打开URL。
- shared_preferences:在应用程序的各种会话中使用的用户首选项。
- path_provider:与特定目录相关的路径信息,例如上载目录,图像等。
您可以在应用程序中使用这些插件中的每一个,但它们也可以作为示例说明如何使用Flutter代码中的本机Linux功能。例如,这是url_launcher插件实现的源代码。
将应用程序发布到Snap Store
要将Flutter应用发布到Snap Store,首先需要安装Snapcraft,该工具用于构建和发布应用作为snap软件包:
$ sudo snap install snapcraft --classic
要利用Snapcraft的功能,您需要在应用程序的项目目录中创建一个文件
snapcraft.yaml
。例如,Flokk的文件如下所示:
name: flokk-contacts
version: 1.0.1
summary: Flokk Contacts
description: A fresh and modern Google Contacts manager that integrates with GitHub and Twitter.
confinement: strict
base: core18
grade: stable
apps:
flokk-contacts:
command: flokk-contacts
extensions: [flutter-master]
plugs:
- network
parts:
flokk-contacts:
source: .
plugin: flutter
flutter-target: lib/main.dart # ,
现在,在带有文件的目录中,
snapcraft.yaml
您可以运行Snapcraft来创建应用程序快照包:
$ snapcraft
如果一切正常,此命令将在当前工作目录中创建一个文件。它将被称为这样:
flokk-contacts_1.0.1_amd64.snap
准备好将应用程序发布到Snap Store的帐户后,可以发布刚创建的快照:
$ snapcraft login
$ snapcraft register flokk-contacts
$ snapcraft upload flokk-contacts_1.0.1_amd64.snap --release edge
在这里,我们将应用程序上载到Snap Store并尝试将其发布到边缘feed。将应用程序发布到此频道后,您可以通过Snap Store桌面客户端或使用命令行进行安装:
$ snap install --edge flokk-contacts
有关如何创建第一个应用程序并将其发布到Snap Store的详细信息,请参见此处。
Flutter桌面应用程序的示例
Flokk应用程序是Linux桌面现实项目的一个很好的例子。作为一个简单的示例,请查看“照片搜索”应用程序。它是专门为演示Flutter开发桌面应用程序的功能而创建的。

照片搜索应用程序
这是一个简单的在线照片搜索应用程序,它使用多个插件来访问其支持的平台(包括macOS和Linux)的本机功能。
如果您需要有关如何开发Linux桌面应用程序的逐步说明,请查看此代码实验室教程。它着重于使用OAuth和GraphQL使用Flutter构建GitHub客户端。

GitHub客户端
如果您想探索一个更复杂的项目,该项目使用了Flutter的更多功能,并且提供了一些有趣的代码示例,那么您可以看看Flutter Gallery应用程序。去年重做了。除了移动平台,它现在还支持桌面平台。如果要查看此应用程序的运行情况,可以从Snap Store下载它。

可以从Snap Store下载Flutter Gallery App。
这是另一个说明Flutter娱乐功能的桌面应用程序。这是由Thorsten Lorenz创建的多人batufo游戏。这款精美的游戏可以让来自世界各地的玩家实时相互竞争。

在Flutter
Thorsten支持的不同平台上运行的Batufo游戏创建了该游戏,并支持各种平台,包括Linux,macOS,Android和iOS。如果您有兴趣了解这款游戏的开发方式,并且希望观看该项目的发展,则可以观看这些视频并查看项目存储库。在Linux上,可以从Snap Store安装该游戏。
结果
随着Flutter for Linux的Alpha版本的发布,以及Google和Canonical之间的紧密合作,Linux开发人员现在可以使用Flutter的功能来创建适合其操作系统的应用程序。您所需要做的就是安装Flutter SDK snap,使用VS Code或Android Studio生成和测试应用程序,然后将其发布到Snap Store。有关使用Flutter进行桌面开发的新闻,请参见此处。而且,这对我们来说非常非常重要,请尝试进行评论关于Flutter的新功能。这将帮助我们使Linux对Flutter应用程序的支持尽可能地好。事实上,我们努力通过与其他平台合作来实现相同目标。
Canonical开发团队的Linux Flutter向前迈出了一大步,朝着使Flutter成为所有平台的最终应用程序开发框架的梦想又迈进了一步。现在可以为台式机开发Flutter应用程序这一事实使Flutter引擎更易于为各种设备使用。尽管Google无法直接支持这些设备,但该公司计划继续与其他公司建立合作伙伴关系,并开发Flutter生态系统。
我们希望在需要快速且吸引人的应用程序的所有设备上看到Flutter。
您是否尝试过为Linux构建Flutter应用程序?
