Canonical通过Flutter启用Linux桌面应用程序支持
子标题:Ubuntu团队为所有Linux发行版上的Flutter应用程序制作了一个新的基于GTK +的主机。
此文翻译自:https://medium.com/flutter/announcing-flutter-linux-alpha-with-canonical-19eb824590a9
作者:克里斯·塞尔斯(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中的实验与基础桌面OS进行深度集成,并可以访问系统菜单栏和标准对话框。所有这些工作是为了确保除了适合移动样式的体验之外,Flutter还准备处理功能齐全的全尺寸桌面应用程序。
为Flutter平台提供动力是我们长期的愿景。我们已经在Google上看到了带有Assistant等产品的清单,所以现在我们很高兴看到其他人利用Flutter来支持更多平台。今天,我们很高兴与全球最流行的台式机Linux发行版Ubuntu的发行商Canonical共同宣布Flutter的Linux alpha版本。
为什么要在Linux上使用Flutter?
去年,当Google宣布对Flutter提供桌面级应用程序支持时,Canonical看到了一个令人振奋的机会来进行Linux发行,包括Ubuntu,这是Flutter应用程序开发人员的有吸引力的目标平台。 Flutter的原生跨平台故事正在迅速发展,Canonical希望成为先锋。通过在Flutter中启用桌面Linux支持,Canonical使得应用程序开发人员可以非常轻松地通过Snap Store(Linux应用程序商店)为Linux用户发布他们的应用程序。通过使Linux成为一流的Flutter平台,Canonical邀请应用程序开发人员将其应用程序发布给数百万Linux用户,并扩大可供他们使用的高质量应用程序的可用性。
有关Flutter的许多事情对于Canonical来说是令人兴奋的:
- 快速发展的应用程序开发人员生态系统
- 多平台支持
- 高度优化的本机应用程序
- 现代的UI框架,支持声明式,反应式和可组合的小部件
- 使用Visual Studio Code,Android Studio和IntelliJ的丰富开发平台
Google最初宣布的Flutter桌面支持宣布是从支持macOS的Alpha版本以及针对Linux和Windows的计划开始的。Canonical 通过组建一支开发人员团队与Google的开发人员合作,将Flutter的最佳体验带给大多数Linux发行版,从而对Flutter进行了重大投资。 Canonical将继续与Google合作,以进一步改善Linux支持并保持与其他受支持平台的功能对等。
Flokk:证明Flutter已为台式机做好准备
为了证明Flutter已为台式机做好了准备,我们与gskinner的设计师和开发人员合作,创建了创新的,精美的Flutter台式机应用程序。 Flokk是一个真实世界的应用程序,可处理真实世界的数据,尤其是您的Google联系人列表。
此视频地址:https://www.youtube.com/watch?time_continue=120&v=cTFJcq7UTRY&feature=emb_logo
除了能够管理您的联系人(包括搜索联系人,添加新联系人和编辑现有联系人)之外,Flokk还使您可以将GitHub和Twitter处理与您的联系人信息。
GitHub和Twitter通知的显示将您的联系人变成您自己的个人社交网络。而且,如果您在Flokk Contacts中没有看到您喜欢的社交网络,那么好消息是Flokk是完全开源的,因此您可以提交PR来添加您喜欢的。
除了在社交空间中进行创新外,Flokk还使用Flutter功能使外观看起来很棒。仅作为一个示例,深色主题不仅可以切换颜色,还可以对更改进行动画处理。
Flokk Contacts应用程序背后的创意团队由Grant Skinner领导,他以出色的设计和实施创新的用户体验而闻名。 Grant曾说过关于在Linux上使用Flutter:
“构建Flokk Contacts应用程序非常容易!我们几乎无需进行任何调整就可以将我们在Flutter上的所有专业知识应用于目标Linux,并且该应用程序运行出色。与Canonical团队合作是一次很棒的经历。他们热心,投入并热衷于使Flutter不仅针对Linux,而且针对每个平台都变得更好。这是一个了不起的项目,我很高兴能够使用Flutter定位另一个主要的操作系统。” —Grant Skinner
如果您想在Linux机器上使用Flokk应用,则可以在GitHub上下载最新版本。或者,如果您正在快速运行,则可以从Snap Store下载Flokk应用。
在Linux上轻松安装Flutter
现在,您已经了解了Flutter在桌面类应用程序(尤其是Linux)上的运行情况,您将希望使其在自己的Linux机器上运行。为使操作尽可能简单,我们很高兴在Snap Store中提供Linux版Flutter SDK。 Flutter SDK快照提供了在您喜欢的Linux发行版上开发Flutter应用程序所需的一切。无需安装大量开发依赖项;只需安装Flutter SDK快照和您最喜欢的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应用程序的Runner项目创建linux子目录。
从Flutter访问Linux中的本机代码
除了通过编写Dart来创建Flutter小部件来支持桌面之外,您的Linux桌面应用还可以使用平台渠道或C / C ++的Dart外部功能接口访问所有本机Linux。或者,如果您想重复使用现有代码,则可以在pub.dev,Dart和Flutter的程序包管理器网站上找到该代码。在pub.dev上可以找到的大多数软件包都是纯Dart的,大多数都可以在Linux应用程序中正常工作。有些软件包(称为插件)中包含特定于一个或多个平台的本机代码。作为此版本的一部分,我们在pub.dev上发布了三个使用Linux本机功能的插件:
- url_launcher: 在提供的URL上启动默认浏览器
- shared_preferences: 应用会话之间共享的用户首选项
- path_provider: 有关专用目录的路径信息,例如下载,图片等
您可以在应用程序中使用这些插件中的每个插件,并作为如何从Flutter代码本地访问Linux的示例,例如Linux implementation of url_launcher。
部署到 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 # app's main entry-point file
现在,在带有snapcraft.yaml文件的目录中,您可以运行snapcraft来构建应用程序的快照。
$ 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
此命令会将应用程序上载到Snap Store,并尝试将其发布到边缘通道。在边缘通道中发布应用程序后,可以通过Snap Store Desktop客户端或使用命令行来安装它:
$ snap install --edge flokk-contacts
有关构建第一个快照并将其发布在Snap Store中的更多详细信息,请参阅 https://snapcraft.io/first-snap#flutter 以获取指导教程。
Flutter Linux桌面案例
Flokk应用程序是针对Linux桌面的真实Flutter应用程序的绝佳示例。对于更简单的示例,您可以查看照片搜索应用程序,该应用程序还专门用于展示桌面功能。
Photo Search是一个简单的在线照片搜索应用程序,它使用多个插件来访问本机平台功能,同时支持macOS和Linux。
对于带有分步说明的示例Linux桌面应用程序,我建议编写Write Flutter桌面应用程序代码实验室,该教程将指导您使用OAuth和GraphQL在Flutter中构建GitHub客户端。
对于一个功能更全面的应用程序,该应用程序可以使用Flutter的更多表面积并提供几个小程序,我推荐Flutter Gallery,该软件去年进行了重新设计,以支持台式机和移动设备。如果您希望看到它的实际效果,也可以在Snap Store中查看。
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平台做最好的Flutter。
来自Canonical团队的Linux Flutter,对于我们的梦想是向前迈出了一大步,无论您将目标对准哪个平台,Flutter都是构建应用程序的最佳方法。针对台式机的定位使得Flutter引擎更加适应Google本身无法直接支持的长尾设备,但我们计划为此继续建立合作伙伴关系并实现生态系统。
无论哪里的设备都需要快速,精美的应用程序,这就是我们希望Flutter成为的地方。
交流
老孟Flutter博客地址(330个控件用法):http://laomengit.com
欢迎加入Flutter交流群(微信:laomengit)、关注公众号【老孟Flutter】:
![]() |
![]() |
Canonical通过Flutter启用Linux桌面应用程序支持的更多相关文章
- Linux 桌面玩家指南:17. 在 Ubuntu 中使用 deepin-wine,解决一些依赖 Windows 的痛点问题
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- 如何在Linux桌面环境下自动启动程序?
大多数Linux桌面环境有各自的图形用户界面(GUI),让用户可以配置针对特定用户的自动启动程序或服务.本文将介绍如何在各种Linux桌面环境下,自动启动某个程序的方法. AD:WOT2014:用户标 ...
- 一个酷绚的linux 桌面程序 GLX-DOCK (cario-dock)
记录一个酷绚的linux 桌面程序 GLX-DOCK (cario-dock),支持多种风格的桌面主题. http://glx-dock.org/ 优势: 多个workspaces 方便自由切换 ...
- DELPHI开发LINUX桌面程序
DELPHI开发LINUX桌面程序 DELPHI官方目前为止尚不能开发LINUX桌面程序. 但三方控件FmxLinux(商业控件)是可以的.网上有破解版本.
- Linux 桌面美化那点事儿
各个 Linux 桌面发行版刚拿到手的时候,或多或少都有点儿不满意,对它们进行一些改造是必须的.网上不乏各种 Linux 桌面美化的教程和经验贴,对我们这些 Linux 爱好者来说都是很好的参考资料. ...
- 7款应用最广泛的Linux桌面环境盘点
转载:http://top.jobbole.com/34823/ 多样性应该是 Linux 最好的特性之一,用户可以不断尝试各种喜欢和新鲜玩法与花样,并从中找出最适合自己的应用.无论你是 Linux ...
- Linux 桌面玩家指南:16. 使用 CUDA 发挥显卡的计算性能
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- Linux 桌面玩家指南:10. 没有 GUI 的时候应该怎么玩
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- Linux 桌面玩家指南:01. 玩转 Linux 系统的方法论
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
随机推荐
- VMWare 安装CentOS7 时启动黑屏
针对这个问题找了好久解决方案,发现网络上的都没啥用. 首先根据网络上的文章,查看cpu虚拟化设置.清空网络设置等等... 都没什么效果. 经过一段时间排查发现问题根源: win10系统下,启动 vmw ...
- LR脚本信息函数-lr_get_host_name
lr_get_host_name() 返回主机的名称. char * lr_get_host_name(); lr_get_host_name函数返回执行脚本的机器的名称. 示例:lr_get_hos ...
- OO第二单元——兜兜转转之神秘电梯
一.设计策略及程序结构分析 1.第一次作业 第一次作业是需要我们用多线程模拟一个实时电梯系统,功能比较简单正常,但要有捎带功能,我采用的调度策略便是指导书上提供的ALS调度策略,采用消费者-生产者模式 ...
- ca13a_c++_顺序容器的操作6删除元素
/*ca13a_c++_顺序容器的操作6删除元素c.erase(p) //删除迭代器p指向的位置c.erase(b,e) //删除b to e之间的数据,迭代器b包括,e不包括c.clear()//删 ...
- c++ cc24a_demo //转换函数,用来做转换操作符,int()括号里面必须是空的,必须定义为const,代码示范
c++ cc24a_demo //转换函数,用来做转换操作符,int()括号里面必须是空的,必须定义为const,代码示范 #include <iostream> #include < ...
- Beta冲刺--冲刺总结
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 Beta冲刺--冲刺总结 作业正文 如下 其他参考文献 ... Beta冲刺 ...
- Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?
在 C/C++/Java 等等语言中,整型变量的自增或自减操作是标配,它们又可分为前缀操作(++i 和 --i)与后缀操作(i++ 和 i--),彼此存在着一些细微差别,各有不同的用途. 这些语言的使 ...
- Java中String创建原理深入分析
创建String对象的常用方式: 1. 使用new关键字 String s1 = new String(“ab”); // 2. 使用字符串常量直接赋值 String s2 = “abc”; 3 ...
- 定量度量程序复杂度的McCabe方法
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 请画出下面代码的 ...
- .Net Core Configuration源码探究
前言 上篇文章我们演示了为Configuration添加Etcd数据源,并且了解到为Configuration扩展自定义数据源还是非常简单的,核心就是把数据源的数据按照一定的规则读取到指定的字 ...