[Flutter翻译]Canonical通过Flutter实现对Linux桌面应用的支持

1,591 阅读9分钟

副标题:Ubuntu团队已经为所有Linux发行版上的Flutter应用程序制作了一个新的基于GTK+的主机。

原文地址:medium.com/flutter/ann…

原文作者: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的可用性。

为什么Linux要用Flutter?

去年,当Google宣布用Flutter支持桌面级应用时,Canonical看到了一个令人兴奋的机会,使包括Ubuntu在内的Linux发行版成为对Flutter应用开发者有吸引力的目标平台。Flutter的原生跨平台故事正在迅速发展,Canonical希望成为先锋。通过在Flutter中实现对桌面Linux的支持,Canonical让应用开发者可以非常容易地通过Linux的应用商店Snap Store为Linux用户发布应用。通过使Linux成为一流的Flutter平台,Canonical正在邀请应用开发者向数百万Linux用户发布他们的应用,并扩大向他们提供高质量的应用。

关于Flutter的一些事情让Canonical感到兴奋。

  • 快速增长的应用开发者生态系统
  • 多平台支持
  • 高度优化的本地应用
  • 现代UI框架,支持声明式、反应式和可组合的widget。
  • 使用Visual Studio Code、Android Studio和IntelliJ的丰富开发平台。

谷歌最初宣布宣布支持Flutter桌面,首先是支持macOS的alpha版本,并计划支持Linux和Windows。Canonical对Flutter进行了大量投资,专门成立了一个开发者团队,与谷歌的开发者一起为大多数Linux发行版带来最佳的Flutter体验。Canonical将继续与谷歌合作,进一步完善对Linux的支持,并保持与其他支持平台的功能对等。

Flokk。证明Flutter已经为桌面做好了准备。

为了证明Flutter已经为桌面做好了准备,我们与gskinner的设计师和开发人员合作,创建了一个创新的、漂亮的Flutter桌面应用。Flokk是一个现实世界的应用,它可以使用现实世界的数据,特别是你的谷歌联系人列表。

视频将 Flutter 带到 Linux。Flokk联系人

除了能够管理你的联系人,包括搜索联系人、添加新的联系人和编辑现有的联系人,Flokk还可以让你将GitHub和Twitter的手柄信息与你的联系人关联起来。

Flokk通讯录应用是用Flutter打造的,针对的是桌面。

GitHub和Twitter通知的显示,将你的联系人变成了你自己的个人社交网络。如果你在Flokk Contacts中没有看到你喜欢的社交网络,那么好消息是Flokk是完全开源的,所以你可以提交PR来添加你的收藏夹。

除了在社交领域的创新,Flokk还使用Flutter功能,让人看起来感觉很好。仅举一例,深色主题不仅可以切换颜色,而且在切换时还会有动画变化。

gif

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应用。

在Linux上轻松安装Flutter

现在你已经看到了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作为快件的更多信息,请参阅 snapcraft.io/flutter

Flutter for Linux桌面

一旦在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应用程序。

从Flutter访问Linux中的本地代码

除了通过编写Dart创建Flutter小部件来支持桌面外,你的Linux桌面应用程序还可以使用平台通道C/C++的Dart外函数接口来访问所有的原生Linux。或者,如果你想重用已有的代码,你可以在 pub.dev,Dart 和 Flutter 的包管理器网站上找到这些代码。在pub.dev上,你会发现大部分的包都是纯Dart的,其中大部分在Linux应用中工作得很好。有些包,被称为插件,其中有针对一个或多个平台的本地代码。作为此次发布的一部分,我们在 pub.dev 上发布了三个使用 Linux 本地功能的插件。

这些插件中的每一个都可以供你在你的应用程序中使用,以及作为如何从你的Flutter代码中原生地访问Linux的一个例子,比如url_launcher的Linux实现

部署到Snap Store

要将你的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中发布的更多细节,请参见 snapcraft.io/first-snap#… ,获取指导教程。

Flutter Linux桌面样本

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的多人游戏。这款游戏以美丽的背景为背景,让来自世界各地的玩家实时对战。

gif

在多个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(免费版)翻译