Canonical 在 Linux 上提供 Flutter 桌面应用支持
作者 / 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
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 提供丰富的开发平台
Flokk 应用: Flutter 已为桌面系统做好准备
gskinner http://gskinner.com/ 将 Flutter 带到 Linux 中: Flokk Contacts https://www.bilibili.com/video/BV17f4y1R7vG/
GitHub: Flokk https://github.com/gskinnerTeam/Flokk/
构建 Flokk Contacts 应用实在太轻松了!我们能够把过去的 Flutter 专业知识全部运用到 Linux 上,几乎不需要任何调整,而且这个应用运行得非常好。与 Canonical 团队的合作也相当美妙: 他们热情又投入,全力让 Flutter 在 Linux 和所有其他平台上都能变得更好。这是一个了不起的项目,我很荣幸能够利用 Flutter 进驻另一个主要操作系统。 — Grant Skinner
在 GitHub 上获取 Flokk
https://github.com/gskinnerTeam/Flokk/releases
在 Snap Store 上获取 Flokk
https://snapcraft.io/flokk-contacts
在 Linux 上轻松安装 Flutter
$ snap install --classic flutter
$ snap install --classic code
$ code --install-extension dart-code.flutter
安装 Android Studio
https://developer.android.google.cn/studio/install#linux
Flutter SDK snap
https://snapcraft.io/flutter
适用于 Linux 桌面的 Flutter
$ flutter channel dev
$ flutter upgrade
$ flutter config --enable-linux-desktop
$ flutter create counter
$ cd counter
$ flutter run -d linux
$ cd my_flutter_app
$ flutter create .
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
url_launcher 的 Linux 实现
https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_linux/
部署到 Snap Store
$ sudo snap install snapcraft --classic
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 # app's main entry-point file
$ snapcraft
$ 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 install --edge flokk-contacts
edge 渠道 https://snapcraft.io/docs/channels#heading--risk-levels
指导教程: 发布首个 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
"编写 Flutter 桌面应用" codelab https://codelabs.flutter-io.cn/codelabs/flutter-github-graphql-client/
△ Flutter Gallery 示例可通过 Snap Store 获取
Flutter Gallery
https://github.com/flutter/gallery
从 Snap Store 上下载
https://snapcraft.io/flutter-gallery
△ 跨多个 Flutter 平台进行实时游戏
batufo
https://thlorenz.com/batufo/
开发视频 https://thlorenz.com/batufo/#watch GitHub: batufo https://github.com/thlorenz/batufo Snap Store: batufo https://snapcraft.io/batufo
总结
在 Linux 上安装 Flutter
https://snapcraft.io/flutter
Flutter 桌面支持
http://flutter.cn/desktop
提交反馈
https://github.com/flutter/flutter/issues
推荐阅读