Canonical通过Flutter支持Linux桌面应用
by liam zheng on 10 July 2020
本文由Chris Sells(Google)和Ken VanDine(Canonical)所写
Google对Flutter的目标一直是提供一个构建以原生速度运行的精美UI的可移植的框架,无论您使用的平台是什么。为了验证此功能,我们首先关注于Android和iOS移动平台,我们已经在Google Play上看到了8万多个快速和精美的Flutter应用程序。
为了获得成功,一年多来,我们一直将重点扩展到包括桌面级体验,包括针对Web和桌面系统(macOS,Windows和Linux)的体验。这项工作包括对引擎的大量重构,以支持桌面样式的鼠标和键盘输入以及可调整大小的顶层窗口。它还包括可以很好地适应桌面的新UI功能,例如Material Density支持和NavigationRail,以及通过Dart:FFI中的实验与底层桌面操作系统深度集成的实验,并可以访问系统菜单栏和标准对话框。所有这些工作是为了确保除了适合移动样式的体验外,Flutter已具备处理功能齐全的全尺寸桌面应用程序。
我们对Flutter的长期愿景是使其为平台提供动力。我们已经在Google上看到了诸如Assistant之类产品的清单,所以现在我们很高兴看到其他人利用Flutter为更多平台提供支持。今天,我们很高兴与全球最流行的Linux桌面发行版Ubuntu的发行商Canonical共同宣布Flutter的Linux alpha版本。
为什么要在Linux上使用Flutter?
去年,当Google宣布对Flutter提供桌面级应用程序支持时,Canonical看到了一个令人振奋的机会,可以Linux在发行,包括对Flutter应用开发者来说一个极具吸引力的目标平台——Ubuntu。Flutter的原生跨平台故事正在迅速发展,Canonical希望成为先锋。通过在Flutter中启用桌面Linux支持,Canonical使得应用程序开发人员可以非常轻松地通过Snap Store(Linux应用程序商店)为Linux用户发布他们的应用程序。通过使Linux成为一流的Flutter平台,Canonical邀请应用程序开发人员将其应用程序发布给数百万的Linux用户,并扩大可供他们使用的高质量应用程序的可用性。
Flutter有很多让Canonical振奋的事情:
- 快速发展的应用程序开发者生态系统
- 多平台支持
- 高度优化的原生应用程序
- 现代UI框架,支持声明式,反应式和可组合的小部件
- 使用Visual Studio Code,Android Studio和IntelliJ的丰富开发平台
Google最初的公告是为macOS的Alpha版本支持,计划对Linux和Windows提供支持。Canonical正在对Flutter进行一项重要的投资,例如通过组建一支开发人员团队与Google的开发人员合作,为大多数Linux发行版带来最好的Flutter体验。Canonical将继续与Google合作,以进一步改善对Linux的支持并保持与其他受支持平台的功能对等。
Flokk: 证明Flutter为桌面系统已准备就绪
为了证明Flutter已为桌面系统做好了准备,我们与gskinner.com的设计师和开发人员合作,创建了一款创新,美观的Flutter桌面系统应用程序:
除了能够管理您的联系人(包括搜索联系人,添加新联系人和编辑现有联系人)之外,Flokk还允许您将GitHub和Twitter处理信息与您的联系人相关联。

GitHub和Twitter通知的显示将您的联系人变成您自己的个人社交网络。 而且,如果您在Flokk Contacts中没有看到自己喜欢的社交网络,您可以提交PR来添加您喜欢的,因为Flokk是完全开源的。
除了在社交空间中进行创新外,Flokk还使用Flutter功能使外观看起来很棒。仅作为一个示例,深色主题不仅是颜色的切换,还能应用过渡动画。

如果您想要使用Flokk应用,可以到Github下载最新的版本。如果您正在使用snapd,那么你可以从Snap应用商店进行下载。
在Linux上安装Flutter
现在,您已经了解了Flutter在桌面类应用程序(尤其是Linux)上的运行情况,您将可使其在自己的Linux机器上运行。为使操作尽可能简单,我们很高兴在Snap应用商店中提供Linux版Flutter SDK。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
一旦,您在Linux机器上安装Flutter SDK之后,要构建桌面应用程序,您需要访问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上且运行于最新稳定版本GTK +上的闪亮的Linux新应用程序。如果您有一个现有的Flutter项目,并且希望在启用Linux之后向其添加Linux支持,则可以这样添加Linux子文件夹:
$ cd my_flutter_app
$ flutter create .
这将与您需要去构建和在Linux桌面运行您的Flutter应用的流道项目一起创建一个Linux子文件夹。
部署到Snap应用商店
要部署您的Flutter应用到Snap应用商店,您需要先安装Snapcraft,它可让您以snap应用包的形式创建和发布应用。
$ sudo snap install snapcraft --classic
要使用Snapcraft,您需要在您的应用项目文件夹中创建一个snapcraft.yaml文件。以Flokk snap为例:
name: flokk-contacts version: 1.0.0 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 # The main entry-point file of the application
现在,您可以运行snapcraft来构建snap版的应用。
$ snapcraft
如果一切顺利,这个步骤将会在当前的目录下生成一个名为“flokk-contacts_1.0.0_amd64.snap”的文件。
当您完成账户创建后,您可以将此应用发布到Snap应用商店:
$ snapcraft login
$ snapcraft register flokk-contacts #(registers the snap name in the store, these must be unique)
$ snapcraft upload flokk-contacts_1.0.0_amd64.snap --release edge
上述命令将会把它上传到Snap应用商店,然后发布到edge通道。应用发布后,可通过桌面商店客户端,或者命令行进行安装:
$ snap install --edge flokk-contacts
更多关于Snap构建和发布的内容,请参考我们的教程:https://snapcraft.io/first-snap#flutter
其他Flutter Linux桌面示例,请参考英文原文博客
订阅博客文章
查看更多内容
誏容器镜像在 “源头” 就得到安全维
软件供应链安全已成为开发者、DevOps 工程师与 IT 领导者的首要痛点。高曝光数据泄露与依赖链渗透已证实,开源组件若未经严格审计与持续维护,可能构成安全威胁。尽管容器化技术已在现代开发部署体系中普及,但其在可复现性与安全防护方面仍存在固有缺陷。 容器构建方案亟需满足以下核心要求:部署简易性、运行安全性、构建可复现性,并能长期维护以应对新型威胁——这正是 Canonical 推出容器构建服务的根本动因。 开源安全挑战 开源软件(OSS)在企业环境中的应用正变得愈发普及。分析表明,开源软件约占所有在用软件的 70%,它已然不再是一种补充性组件,而实为现代应用程序的基石。更值得关注的是,据报告显示,97% 的商业代码库已集成某些开源软件组件,这足以彰显其实际地位之关键,已 […]
Canonical 官方构建版 OpenJDK – 正式发布
长久以来,Java 在大型企业级软件开发领域占据领军地位,90% 的《财富》500 强企业将其用于后端开发,尤其在金融、医疗及政府等关键行业。 相较于大多数开发者,Java 开发者更需要承担这样的任务:在实现新功能与满足遗留应用的安全性、稳定性和性能等关键要求之间取得平衡。管理不同的 Java 版本、安全更新及部署构件,面临极大的复杂度。 基于上述原因,我们决定加强对工具链的投入,提供一套更全面的解决方案,让企业用户和社区成员都能从中受益。Canonical 的 OpenJDK 支持方案围绕以下核心原则构建: 下面我们将针对上述各要素逐步展开深入探讨。 安全增强保障:提供长效安全保障与稳定运行支持 Ubuntu Pro 订阅服务为所有 OpenJDK LTS 构建版提供 […]
Canonical 通过 NVIDIA 企业级 AI 工厂认证
Canonical 通过 NVIDIA 企业级 AI 工厂认证设计交付 Kubernetes 平台与开源安全解决方案 参考架构加速智能代理 AI 项目上市进程 为简化企业 AI 应用路径,加速 AI 洞察向商业价值的转化,NVIDIA 近日发布 NVIDIA 企业 AI 工厂验证设计,该方案作为集成式解决方案生态,可实现与企业系统、数据源及安全基础设施的无缝连接。NVIDIA 软硬件设计模板专为现代 AI 项目定制,涵盖物理 AI 与 HPC,重点关注智能代理 AI 工作负载。 Canonical 荣膺 NVIDIA 企业级 AI 工厂验证设计生态伙伴Canonical Kubernetes 容器编排方案,支持在高性能基础设施上高效构建、部署及管理多样化且持续演进的 A […]