副标题:Ubuntu 团队已经为所有 Linux 发行版上的 Flutter 应用程序制作了一个新的基于 GTK+的主机。
原文地址: https://medium.com/flutter/announcing-flutter-linux-alpha-with-canonical-19eb824590a9
原文作者: https://medium.com/@csells
发布时间:2020 年 7 月 8 日
作者:Chris Sells (Google) & Ken VanDine (Canonical)
Google 对 Flutter 的目标一直是提供一个可移植的工具包,用于构建以原生速度运行的漂亮 UI,无论你的目标是哪个平台。为了验证这一能力,我们首先关注移动平台 Android 和 iOS,在这两个平台上,我们已经看到有超过 8 万个快速、漂亮的 Flutter 应用发布到 Google Play 。
为了在这一成功的基础上再接再厉,一年多来,我们一直在将我们的关注点扩展到包括桌面级体验,包括网络和桌面操作系统:macOS 、Windows 和 Linux 。这项工作包括对引擎进行大量重构,以支持桌面风格的鼠标和键盘输入,以及可调整大小的顶层窗口。它还包括新的 UI 功能,能很好地适应桌面,如 Material Density 支持和NavigationRail,以及在Dart:FFI中的实验和对系统菜单栏和标准对话框的访问,与底层桌面操作系统深度集成的实验。所有这些工作都是为了确保 Flutter 除了适合移动风格的体验外,还能处理全功能、全尺寸的桌面应用。
长期以来,我们的愿景是让 Flutter 为平台提供动力。我们已经看到这一点在谷歌通过Assistant等产品体现出来,所以现在我们很高兴看到其他人利用 Flutter 为更多平台提供动力。今天,我们很高兴与世界上最流行的桌面 Linux 发行版Ubuntu的发行商 Canonical 一起,共同宣布 Flutter 的 Linux alpha 的可用性。
去年,当 Google 宣布用 Flutter 支持桌面级应用时,Canonical 看到了一个令人兴奋的机会,使包括 Ubuntu 在内的 Linux 发行版成为对 Flutter 应用开发者有吸引力的目标平台。Flutter 的原生跨平台故事正在迅速发展,Canonical 希望成为先锋。通过在 Flutter 中实现对桌面 Linux 的支持,Canonical 让应用开发者可以非常容易地通过 Linux 的应用商店 Snap Store 为 Linux 用户发布应用。通过使 Linux 成为一流的 Flutter 平台,Canonical 正在邀请应用开发者向数百万 Linux 用户发布他们的应用,并扩大向他们提供高质量的应用。
关于 Flutter 的一些事情让 Canonical 感到兴奋。
谷歌最初宣布宣布支持 Flutter 桌面,首先是支持 macOS 的 alpha 版本,并计划支持 Linux 和 Windows 。Canonical 对 Flutter 进行了大量投资,专门成立了一个开发者团队,与谷歌的开发者一起为大多数 Linux 发行版带来最佳的 Flutter 体验。Canonical 将继续与谷歌合作,进一步完善对 Linux 的支持,并保持与其他支持平台的功能对等。
为了证明 Flutter 已经为桌面做好了准备,我们与gskinner的设计师和开发人员合作,创建了一个创新的、漂亮的 Flutter 桌面应用。Flokk 是一个现实世界的应用,它可以使用现实世界的数据,特别是你的谷歌联系人列表。
除了能够管理你的联系人,包括搜索联系人、添加新的联系人和编辑现有的联系人,Flokk 还可以让你将 GitHub 和 Twitter 的手柄信息与你的联系人关联起来。
Flokk 通讯录应用是用 Flutter 打造的,针对的是桌面。
GitHub 和 Twitter 通知的显示,将你的联系人变成了你自己的个人社交网络。如果你在 Flokk Contacts 中没有看到你喜欢的社交网络,那么好消息是 Flokk 是完全开源的,所以你可以提交 PR 来添加你的收藏夹。
除了在社交领域的创新,Flokk 还使用 Flutter 功能,让人看起来感觉很好。仅举一例,深色主题不仅可以切换颜色,而且在切换时还会有动画变化。
Flutter 使 Flokk 能够利用流畅的动画、高性能的滚动和简单的主题。
Flokk Contacts 应用背后的创意团队是由Grant Skinner领导的,他以卓越的设计和创新用户体验的实现而闻名。对于在 Linux 上与 Flutter 的合作,Grant 这样说。
"构建 Flokk Contacts 应用是一件轻而易举的事情! 我们能够将我们之前在 Flutter 方面的所有专业知识应用到 Linux 上,几乎没有任何调整,应用程序运行得非常好。与 Canonical 团队合作是一次美妙的经历;他们热情、投入,并且热衷于让 Flutter 不仅适用于 Linux,而且适用于每个平台。这是一个了不起的项目,我很高兴能够用 Flutter 瞄准另一个主要的操作系统。" - Grant Skinner
如果你想在 Linux 机器上使用 Flokk 应用,你可以在GitHub上下载最新版本。或者,如果你正在运行 snapd,你可以从Snap Store下载 Flokk 应用。
现在你已经看到了 Flutter 对于桌面级应用的工作效果,尤其是在 Linux 上,你会想让它在自己的 Linux 机器上运行。为了使这一点尽可能的简单,我们很高兴在Snap Store中提供 Flutter SDK for Linux 作为 Snap 。Flutter SDK snap 提供了在您最喜欢的 Linux 发行版上开发 Flutter 应用程序所需的一切。不需要安装一堆开发依赖;只需安装 Flutter SDK snap 和您最喜欢的 IDE,您就拥有了为 Linux 创建、构建和发布应用程序所需的一切。
例如,如果你想开始为 Linux 开发 Flutter 应用程序,而你选择的 IDE 是 Visual Studio Code,这就是你在 Linux 终端需要做的一切。
$ snap install --classic flutter
$ snap install --classic code
$ code --install-extension dart-code.flutter 。
如果你也想使用 Linux 开发移动应用,你可以通过安装Android SDK 或 Android Studio(其中包括 Android SDK )来实现。有关 Flutter SDK 作为快件的更多信息,请参阅 https://snapcraft.io/flutter 。
一旦在 Linux 机器上安装了 Flutter SDK,要构建桌面应用就需要升级到 Flutter dev 或 master 通道。然后启用 Linux 桌面支持。 启用 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 构建的、运行在最新稳定版 GTK+上的闪亮的新Linux
应用。如果你有一个现有的 Flutter 项目,你想在启用 Linux 后添加 Linux 支持,你可以像这样添加 linux 子目录。
$ cd my_flutter_app
$ flutter create .
这将创建linux
子目录与 Runner 项目,你需要在 Linux 桌面上构建和运行你的 Flutter 应用程序。
除了通过编写 Dart 创建 Flutter 小部件来支持桌面外,你的 Linux 桌面应用程序还可以使用平台通道或C/C++的 Dart 外函数接口来访问所有的原生 Linux 。或者,如果你想重用已有的代码,你可以在 pub.dev,Dart 和 Flutter 的包管理器网站上找到这些代码。在 pub.dev 上,你会发现大部分的包都是纯 Dart 的,其中大部分在 Linux 应用中工作得很好。有些包,被称为插件,其中有针对一个或多个平台的本地代码。作为此次发布的一部分,我们在 pub.dev 上发布了三个使用 Linux 本地功能的插件。
这些插件中的每一个都可以供你在你的应用程序中使用,以及作为如何从你的 Flutter 代码中原生地访问 Linux 的一个例子,比如url_launcher 的 Linux 实现。
要将你的 Flutter 应用部署到 Snap Store,你首先需要安装 Snapcraft,这个工具你将用来构建和发布你的应用作为一个快照。
$ sudo snap install snapcraft --classic
要驱动 Snapcraft 工具,你需要在你的应用程序的项目目录下创建一个snapcraft.yaml
文件。作为一个例子,这是 Flokk 的snapcraft.yaml
文件。
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 来构建你的应用程序的 snap 。
$ snapcraft
如果一切顺利,这将在你当前的工作目录下生成一个文件,比如flokk-contacts_1.0.1_amd64.snap
。
一旦你在 Snap Store 中设置了发布账户,你就可以发布你的 snap 了。
$ snapcraft 登录
$ snapcraft register flokk-contacts.
$ snapcraft upload flokk-contacts_1.0.1_amd64.snap --release edge
该命令将把应用程序上传到 Snap Store,并尝试将其发布到边缘通道中。一旦您的应用程序发布到边缘通道,就可以通过 Snap Store 桌面客户端或使用命令行进行安装。
$ snap install --edge flokk-contacts
有关构建你的第一个快照并在 Snap Store 中发布的更多细节,请参见 https://snapcraft.io/first-snap#flutter,获取指导教程。
Flokk 应用是一个针对 Linux 桌面的现实世界 Flutter 应用的优秀例子。如果想了解更简单的示例,你可以看看照片搜索应用,它也是专门为展示桌面功能而打造的。
尝试 Linux 上的照片搜索示例
照片搜索是一款简单的在线照片搜索应用,它使用多个插件来接入原生平台功能,支持 macOS 和 Linux 。
如果想了解一个 Linux 桌面应用的例子,并有一步一步的说明,我推荐《编写一个 Flutter 桌面应用》 codelab,它指导你使用 OAuth 和 GraphQL 在 Flutter 中构建一个 GitHub 客户端。
Flutter 的 GitHub codelab 客户端应用在行动中。
对于一个更全面的应用,可以锻炼 Flutter 更多的表面积,以及提供几个小程序,我推荐Flutter Gallery,它是去年重新设计的,支持桌面以及手机。如果你想看看它的运行情况,你也可以在Snap Store上查看。
Flutter Gallary 样品可在 Snap 商店购买
又有一款桌面应用展现了 Flutter 有趣的一面,它是由 Thorsten Lorenz 打造的一款名为batufo的多人游戏。这款游戏以美丽的背景为背景,让来自世界各地的玩家实时对战。
在多个 Flutter 平台上实时播放
Thorsten 一直在构建这个游戏,以支持多个 Flutter 平台,包括 Linux,macOS,Android 和 iOS 。如果你想看看他是如何做到的,并跟随未来的更新,他将他的编码课程以视频的形式提供,代码也可以在 GitHub 上获得。如果要从 Linux 上安装游戏,你可以从Snap Store上把它拉下来。
通过这个 alpha 版本以及 Google 和 Canonical 之间的紧密合作,Linux 开发者可以为他们选择的操作系统获得 Flutter 支持。通过快照安装 Flutter SDK。使用 Visual Studio Code 或 Android Studio 在 Linux 上构建和测试你的桌面应用。将您的应用部署到 Snap Store 。最新的细节,请看flutter.dev 上的桌面页面。最重要的是,一定要提供反馈,这样我们才能继续让 Flutter 在 Linux 上做到最好,就像我们努力为每个支持的 Flutter 平台做的那样。
来自 Canonical 团队的 Flutter for Linux 是我们的梦想向前迈出的一大步,让 Flutter 成为构建应用的最佳方式,无论你的目标是哪个平台。针对桌面平台,使得 Flutter 引擎对谷歌本身无法直接支持的长尾设备的适应性更强,但我们计划继续为这些设备建立合作伙伴关系,并启用生态系统。
只要有设备需要快速、漂亮的应用,那就是我们希望 Flutter 出现的地方。
通过 www.DeepL.com/Translator (免费版)翻译