作者 / Chris Sells (Google) 和 Ken VanDine (Canonical)

Google 为 Flutter 设置的目标始终不变: 提供便携的工具包,用于构建以原生速度运行的精美 UI,且不受目标平台限制。为了验证这一能力,我们首先着眼于 Android 和 iOS 移动平台。目前在 Google Play 上已有超过 8 万款运行流畅、设计精美的 Flutter 应用发布。

为了在这一成功的基础上再接再厉,一年多来,我们又将重点延伸到桌面级体验,包括 Web 和桌面操作系统: macOS、Windows 和 Linux。这项工作包括对引擎进行大量重构,以支持桌面风格的鼠标键盘输入和可调整大小的顶层窗口。还包括能够很好地适应桌面的新界面功能,比如 Material Density (Material 内容密度) 和 NavigationRail,通过 Dart:FFI 与底层桌面操作系统达成深度集成,以及对系统菜单栏与标准对话框的访问。所有工作都是为了确保 Flutter 除了适用于移动体验之外,还可以处理全功能、全尺寸的桌面应用。

  • NavigationRail

    https://api.flutter.cn/flutter/material/NavigationRail-class.html

  • Dart:FFI

    https://dart.cn/guides/libraries/c-interop

我们一直致力于让 Flutter 为各平台提供动力。在 Google 的 Assistant 等产品上,这一点已经有所体现。现在,我们很高兴有更多公司使用 Flutter 来为更多平台赋能。我们很荣幸与全球最流行的桌面 Linux 发行版 Ubuntu 的发行商 Canonical 一起,共同宣布推出 Flutter 的 Linux alpha 版。

  • Ubuntu

    https://ubuntu.com/

为什么在 Linux 上推出 Flutter?

去年,当 Google 宣布 Flutter 支持桌面级应用时,Canonical 决定抓住这个机会,将包括 Ubuntu 在内的 Linux 发行版打造成 Flutter 应用开发者喜爱的目标平台。Flutter 的原生跨平台之旅正在如火如荼地开展,而 Canonical 希望成为开路先锋。得益于在 Flutter 中实现的桌面 Linux 支持,Canonical 让应用开发者可通过 Linux 的应用商店 Snap Store 向 Linux 用户轻松发布应用。Canonical 将 Linux 打造成一流的 Flutter 平台,并邀请 Flutter 应用开发者向数百万 Linux 用户发布自己的作品,从而为用户们带来更多高品质的应用。

Flutter 为 Canonical 提供的价值:

  • 快速增长的应用开发者生态系统

  • 多平台支持

  • 高度优化的原生应用

  • 现代化的界面框架,支持声明式 (declarative)、响应式 (reactive) 以及可组合 (composable) 的 widget

  • 通过 Visual Studio Code、Android Studio 和 IntelliJ 提供丰富的开发平台

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

Flokk 应用: Flutter 已为桌面系统做好准备

为了证明 Flutter 已为桌面系统做好准备,我们与 gskinner 的设计师和开发者合作,打造出创新性的精美 Flutter 桌面应用: Flokk。这是一款已经正式发布的应用,它使用真实的数据,比如您的 Google 通讯录列表。

  • gskinner

    http://gskinner.com/

  • 将 Flutter 带到 Linux 中: Flokk Contacts

    https://www.bilibili.com/video/BV17f4y1R7vG/

除了搜索、添加和编辑联系人等管理功能外,Flokk 还可以让您关联 GitHub 和 Twitter 来处理联系人信息。

△ Flokk Contacts 应用由 Flutter 打造,在桌面运行

通过显示 GitHub 和 Twitter 通知,您的联系人列表就成为了强大的个人社交网络。如果您在 Flokk Contacts 中没有看到自己想连接的社交网络,不用担心: Flokk 是完全开源的,您可以提交 PR 让其添加您心仪的社交网络。

  • GitHub: Flokk

    https://github.com/gskinnerTeam/Flokk/

除了在社交领域创新,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 应用。

  • 在 GitHub 上获取 Flokk

    https://github.com/gskinnerTeam/Flokk/releases

  • 在 Snap Store 上获取 Flokk

    https://snapcraft.io/flokk-contacts

在 Linux 上轻松安装 Flutter

了解到 Flutter 应用在桌面 (尤其是在 Linux 中) 运行时的优异表现后,您想必希望在自己的 Linux 机器上实际体验它。为使过程尽可能简单,我们特别在 Snap Store 中提供了 Linux 版 Flutter SDK 的 snap (Snap Store 中分发的包被称为 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 snap 的更多信息,请访问下方链接。

  • 安装 Android Studio

    https://developer.android.google.cn/studio/install#linux

  • Flutter SDK snap

    https://snapcraft.io/flutter

适用于 Linux 桌面的 Flutter

在 Linux 机器上安装 Flutter SDK 后,要构建桌面应用,您需要升级为 Flutter dev 或 master 渠道。然后启用 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 子目录:

$ cd my_flutter_app
$ flutter create .

这将创建带有 Runner 项目的 linux 子目录,您需要通过这个项目在 Linux 桌面上构建和运行您的 Flutter 应用。

Flutter 调用 Linux 原生代码

除了通过编写 Dart 代码创建 Flutter widget 来支持桌面之外,您的 Linux 桌面应用还可以使用平台通道或 C/C++ 的 Dart 外部函数接口访问原生 Linux 的全部功能。或者,如果您想重复使用现有代码,可以在 pub.dev 上找到所需代码,pub.dev 是 Dart 和 Flutter 的 package 管理平台。pub.dev 上大部分的 package 完全使用 Dart 编写,其中大多数都可以在 Linux 应用中正常运行。有些 package (被称作插件) 里包含特定于一个或多个平台的原生代码。作为今天发布的 Flutter Linux 版本的一部分,我们在 pub.dev 上发布了三个使用 Linux 原生功能的插件:

  • url_launcher: 使用提供的网址启动默认浏览器

    https://pub.flutter-io.cn/packages/url_launcher

  • shared_preferences: 在应用会话之间共享的用户偏好设置

    https://pub.flutter-io.cn/packages/shared_preferences

  • path_provider: 专用目录 (例如下载、图片等) 的路径信息

    https://pub.flutter-io.cn/packages/path_provider

  • 平台通道

    https://flutter.cn/docs/development/platform-integration/platform-channels

  • Dart 外部函数接口

    https://dart.cn/guides/libraries/c-interop

  • pub.dev (Linux)

    http://pub.flutter-io.cn/flutter/packages?platform=linux

您可以在应用中使用这些插件,还可以通过它们了解如何通过 Flutter 代码访问原生 Linux,比如 url_launcher 的 Linux 实现。

  • url_launcher 的 Linux 实现

    https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_linux/

部署到 Snap Store

要将 Flutter 应用部署到 Snap Store,首先需要安装 Snapcraft。您将使用这一工具将应用构建和发布为 snap:

$ 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-contactsextensions: [flutter-master]plugs:- network
parts:flokk-contacts:source: .plugin: flutterflutter-target: lib/main.dart # app's main entry-point file

现在,在包含 snapcraft.yaml 文件的目录中,您可以运行 snapcraft 构建应用的 snap。

$ snapcraft

一切顺利的话,这将在您当前的工作目录中生成一个文件,例如 flokk-contacts_1.0.1_amd64.snap。

设置好用于在 Snap Store 中发布 snap 的帐号后,即可发布:

$ snapcraft login
$ snapcraft register flokk-contacts
$ snapcraft upload flokk-contacts_1.0.1_amd64.snap --release edge
  • 设置账号

    https://snapcraft.io/docs/creating-your-developer-account

此命令会将应用上传到 Snap Store,并尝试将其发布至 edge 渠道。在应用发布到 edge 渠道后,即可通过 Snap Store 桌面客户端或以下命令行进行安装:

$ snap install --edge flokk-contacts
  • edge 渠道

    https://snapcraft.io/docs/channels#heading--risk-levels

有关从头构建 snap 并将其发布到 Snap Store 的更多详细信息,请参阅指导教程。

  • 指导教程: 发布首个 snap

    https://snapcraft.io/first-snap#flutter

Flutter Linux 桌面示例

Flokk 应用是一个绝佳的 Flutter 实际应用示例。如需更简单的示例,您可以选择 Photo Search 应用,此应用也是专为展示桌面功能而构建的。

△ 在 Linux 上体验 Photo Search 示例应用

  • Photo Search

    https://github.com/flutter/samples/tree/master/experimental/desktop_photo_search

Photo Search 是一款简单的在线照片搜索应用,使用多个插件访问原生平台功能,同时支持 macOS 和 Linux。

如需带有逐步说明的示例 Linux 桌面应用,推荐您参考 "编写 Flutter 桌面应用" 这个 codelab,它将指导您使用 OAuth 和 GraphQL 在 Flutter 中构建 GitHub 客户端。

△ Flutter GitHub codelab 客户端应用实际效果

  • "编写 Flutter 桌面应用" codelab

    https://codelabs.flutter-io.cn/codelabs/flutter-github-graphql-client/

如果您想深入了解 Flutter 的功能,并体验更多小型程序,我推荐一个更全面的应用: Flutter Gallery,这款应用去年进行了重新设计,以支持桌面和移动设备。如果您想看看它的实际效果,也可以从 Snap Store 下载。

△ Flutter Gallery 示例可通过 Snap Store 获取

  • Flutter Gallery

    https://github.com/flutter/gallery

  • 从 Snap Store 上下载

    https://snapcraft.io/flutter-gallery

Thorsten Lorenz 制作的多人游戏 batufo 则展现出 Flutter 有趣的一面。在这款游戏中,世界各地的玩家在漂亮的场景上展开实时对战。

△ 跨多个 Flutter 平台进行实时游戏

  • batufo

    https://thlorenz.com/batufo/

Thorsten 持续打造这款游戏以支持多个 Flutter 平台,包括 Linux、macOS、Android 和 iOS。如果您想了解他的工作历程以及后续更新,可以观看他的开发视频,并在 GitHub 上查看他提供的代码。您可以从 Snap Store 下载并在 Linux 中安装这个游戏。

  • 开发视频

    https://thlorenz.com/batufo/#watch

  • GitHub: batufo

    https://github.com/thlorenz/batufo

  • Snap Store: batufo

    https://snapcraft.io/batufo

总结

通过 Flutter Linux 的 alpha 版本,以及 Google 与 Canonical 之间的紧密合作,Linux 开发者得以使用 Flutter。欢迎大家通过 snap 安装 Flutter SDK,使用 Visual Studio Code 或 Android Studio 在 Linux 上构建和测试您的桌面应用,并将您的应用部署到 Snap Store。如需了解最新详情,请参阅 Flutter 桌面支持。我们期待您提供反馈,以持续帮助 Flutter 在 Linux 以及所有其他支持平台上变得更好。

  • 在 Linux 上安装 Flutter

    https://snapcraft.io/flutter

  • Flutter 桌面支持

    http://flutter.cn/desktop

  • 提交反馈

    https://github.com/flutter/flutter/issues

我们的梦想是让 Flutter 成为面向所有平台的最佳应用构建方案,借助 Canonical 团队的 Flutter for Linux,我们的梦想向现实迈进了一大步。通过对桌面平台提供支持,使 Flutter 引擎在 Google 无法直接支持的长尾设备上的适应性更强,我们计划不断建立合作关系并持续支持生态系统的成长。

在设备需要运行流畅且精美的应用时,就到了 Flutter 大显身手的时候了。

鸣谢: Kathy Walrath


推荐阅读

 点击屏末  | 访问 Flutter 开发者社区中文资源


Canonical 在 Linux 上提供 Flutter 桌面应用支持相关推荐

  1. linux上的远程桌面工具

    Remmina是一个linux上的远程桌面工具,linux主要的远程桌面协议是VNC,windows也可以用这个协议.linux也有走RDP通信协议,最好的也就是Remmina. 支持几乎所有的lin ...

  2. linux更换桌面图,桌面应用|在 Linux 上安装必应桌面墙纸更换器

    你是否厌倦了 Linux 桌面背景,想要设置好看的壁纸,但是不知道在哪里可以找到?别担心,我们在这里会帮助你. 我们都知道必应搜索引擎,但是由于一些原因很少有人使用它,每个人都喜欢必应网站的背景壁纸, ...

  3. linux上安装osg_如何在 Linux 上安装并启用 Flatpak 支持? | Linux 中国

    Flatpak 提供了一种通用的包封装格式,可以在任何 Linux 发行版中使用.它提供了一个沙箱(隔离的)环境来运行应用程序,不会影响其他应用程序和发行版核心软件包.-- Magesh Maruth ...

  4. linux怎么打开pak文件怎么打开,如何在 Linux 上安装并启用 Flatpak 支持?

    目前,我们都在使用 Linux 发行版的官方软件包管理器来安装所需的软件包. 在 Linux 中,它做得很好,没有任何问题.(它不打折扣地很好的完成了它应该做的工作) 但在一些方面它也有一些限制,所以 ...

  5. 为Linux上的Tomcat安装apr支持

    在安装并配置好JDK和tomcat之后,就可以提供web的访问支持了,但是在启动的信息里面,会有相关的提示,说的意思就是要求你安装apr支持,而安装apr支持需要使用源代码一步一步来. 下面就请跟着我 ...

  6. 在linux上运行flutter,Linux中配置Flutter环境

    我是在Linux系统下配置Flutter环境的,具体操作步骤如下: 在flutter官网下载Linux 最新版的flutter_sdk,这里我没有下载最新版本的,导致用Android Studio 构 ...

  7. littlevgl教程 Linux,[笔记]在嵌入式linux上运行LittlevGL GUI demo 支持tslib

    // 1: 添加头文件包含 #include "tslib.h" // 2: ts结构体声明 struct tsdev *ts; // 3: 修改初始化代码 void evdev_ ...

  8. MiniGUI和其他嵌入式Linux 上的图形及图形用户界面系统

    基于linux和 minigui的嵌入式软件开发指南 第一节:MiniGUl-Threads 和 MiniGUl-Lite 的选择 第二节:理解消息循环和窗口过程 ----------- MiniGU ...

  9. 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南题八——MiniGUI 和其他嵌入式 Linux 上的图形及图形用户界面系统

    简介: 为了让读者对嵌入式 Linux 当中能够使用的图形及图形用户界面有个较为全面的认识,本文将为读者介绍一些嵌入式 Linux 系统中常见的图形及图形用户界面系统,并作为<基于 Linux ...

  10. 嵌入式 Linux 上的图形及图形用户界面系统

    1 Linux 图形领域的基础设施 本小节首先向读者描述 Linux 图形领域中常见的基础设施.之所以称为基础设施,是因为这些系统(或者函数库),一般作为其他高级图形或者图形应用程序的基本函数库.这些 ...

最新文章

  1. Atitit.文件搜索工具 attilax 总结
  2. mysql设置定时任务
  3. gstreamer 获取帧数据_Android App卡顿率(顺滑度、顺滑度)并整理数据
  4. 2020年阿里农产品电商报告
  5. 平安产险项目记录(二)
  6. java List和数组转换
  7. pytorch之tensor操作expand
  8. python 在线培训费用-python培训班费用
  9. UI开发之用PS给图片加水印
  10. php-screw 安装,php源码加密:php_screw 安装与使用
  11. 笔记:《高效能人士的七个习惯》第一章 由内而外全面造就自己
  12. 一篇文章总结Java虚拟机内存区域模型
  13. android 10.0 SystemUI 状态栏下拉快捷添加截图快捷开关
  14. 《葬花吟》笛箫简谱-红楼梦主题曲
  15. 利用Yocto构建嵌入式Linux教程02--Yocto的一些基本概念介绍
  16. 亲历的商务谈判过程(续)——谈谈国企和我的经历
  17. 模板模式template
  18. Windows--从dos下进入D盘,切换盘符
  19. word中将一种颜色的突出显示批量替换为另一种
  20. c语言程序设计植树,C语言程序设计100例之(19):欢乐的跳

热门文章

  1. (一)5G网络超低延迟背后的黑科技
  2. 风螺旋公切线算法详解
  3. 1 12c语言,1.4.1 Oracle数据库12c中PL/SQL的新特性
  4. 第七周 OJ总结4-求三角形面积-gyy
  5. LocalDate 获取英文星期
  6. (转) 那些无用的人----《人类简史》读后感
  7. MPB:南京​湖泊所王建军组-​湖泊沉积物的野外采集方法
  8. 使用BootStrap.编写网页
  9. 南理ARPG游戏深度学习One
  10. 又是一江春水自东流!