在2019年中期之后,跨平台稳固地进入了全球初创企业的生活,但更多的时候是外包开发团队和依靠降低成本的客户来关注它。 有人押注React Native,有人在探索Kotlin Multiplatform的可能性, 新的AppsCast播客Guest Evgeny Saturov saturovv在过去的六个月中一直在积极开发Flutter,监视框架更新并将技术推广给大众。 入门级Flutter开发人员的许多有用链接和提示:从准则到包含体系结构实现示例的存储库-与Eugene进行了对话。
AppsCast 是在 AppsConf 会议的支持下发布的移动开发播客 。 每两周,我们与Daniil Popov( int02h )会晤一位新客人,讨论技术,最佳实践,开发人员的生活以及holivar和分享经验。Alexei Kudryavtsev :大家好,今天,我们正在拜访Surf的开发人员和
Flutter Dev Podcast的主持人Zhenya Saturov。 振亚,告诉我们更多有关您自己的信息。
Evgeny Saturov :我的所有有意识的生活都是一名android开发人员,但是我不确定像
往常一样的无云的未来。 在过去的六个月中,我们公司对Flutter一直很感兴趣,我们正在尝试将其集成到生产开发过程中。
Alexei Kudryavtsev :您是如何突然从Android开发切换到Flutter的?
Evgeny Saturov :一个难题。 我自己有时会问自己。 在新西伯利亚的一次骚乱中,我偶然从他最重要的国家宣传员Zviad Kardava那里听说了Flutter。 我们研究并决定尝试,我们在Flutter上写了六个月的书,我们已经通过声明式UI结识了朋友。
扑捉
Daniil Popov :是什么吸引了您来Flutter?
叶夫根尼·萨图洛夫(Evgeny Saturov) :Flutter的进入门槛很低,缺乏活动和片段的概念,生命周期是基本的,由三个阶段组成。 Flutter中的所有内容都是一个小部件:应用程序本身(我们曾经将其表示为应用程序类),任何块都是一个嵌入了另一个小部件的小部件。 所有屏幕都是按组成专门构建的。 Flutter应用程序的结构需要更简化的体系结构,更一致的数据流。
当您在Android开发之后尝试在Flutter中编写自定义视图时,您的头会有些碎裂。 它在那里不起作用。 您必须将视图相互嵌入,并获得更复杂的组合元素。
在Google I / O上,引入了Android的Jetpack Compose,它使您可以声明性地编写UI。 这个想法完全是从Flutter借来的,即使名称被重用。
Alexei Kudryavtsev :有一个阴谋论,谷歌正在为Flutter准备Android开发人员。
叶夫根尼·萨图洛夫(Evgeny Saturov) :我可以
再提一个阴谋论-苹果公司正在为Flutter准备开发人员。
Flutter与其他跨平台解决方案之间的区别
Alexei Kudryavtsev :您所说的一切都类似于React Native或Xamarin产品的特征。 有什么区别?
Evgeny Saturov :在React Native上
编写高质量的应用程序非常困难,因为它是基础的技术解决方案。 只有通过JavaScript Bridge才能与平台进行交互。 在此过程中,此操作会大量消耗性能,这在呈现UI时至关重要。
但是,Flutter付出了高昂的代价来解决性能问题-框架的开发人员不得不在Dart上编写其小部件包(Flutter也写在上面)。 渲染时,不仅不存在fps的下陷问题,而且Flutter团队还确保从理论上讲,在支持该功能的设备上不仅可以达到60fps,而且可以达到120fps。
许多人讨论了为什么该框架不支持Kotlin以及它是否会出现的话题,但是Flutter开发人员说他们没有这样的任务,但也许其他人也可以做到,例如JetBrains。
Daniil Popov :很明显,有Kotlin Multiplatform。 您需要成为在Dart中编译Kotlin的编译器的一部分,这将有好处。
Alexei Kudryavtsev :您这样说,就好像单击手指一样。
Evgeny Saturov :大部分工作已经完成。 在Google I / O上,他们讨论了如何在Kotlin中优化垃圾收集器,这将使您能够在一毫秒内利用大量对象。 这很重要,因为在渲染UI时,每16毫秒将重新生成数千个小部件图,并且必须立即处理这些小图以防止内存阻塞。 以前,与Dart不同,Kotlin不知道如何,但是现在没有什么可以阻止将他拖入Flutter的了。
Alexei Kudryavtsev :回收过程的第一部分是分配许多对象。 不,此时性能是否下降?
Evgeny Saturov :对象本身很轻。 深入研究Flutter应用程序是一个巨大的recyclerview,它是一个包含可重用元素的列表,这些元素仅在其背后的数据更改时才会呈现。 同时,每16毫秒重新创建的小部件与Android中的,负责在画布上绘制自身的小部件无关。
这里的小部件是数据类,其中有描述此小部件的数据。 在画布上绘制的小部件在整个生命周期中都存在一个副本中。 只有其数据包装程序才能完全重新创建。 这使您可以快速工作而不会阻塞内存。
Flutter是一个完全开源的项目。
这种开放源代码不是每季度从封闭的存储库镜像到公共github的那种。 这是一个真正的开放源代码,直接在github上的开放存储库中进行开发。 您可以对窗口小部件进行任何更改,编写窗口小部件包并在公司中使用。
Alexei Kudryavtsev :如果他们完全制作了自己的小部件,那么动画和屏幕之间的过渡(例如在iOS上)如何处理?
Evgeny Saturov :更为重要的问题是如何使该平台的用户熟悉该应用程序。 开箱即用,几乎在任何情况下都不会发生。 如果您在Dart上编写应用程序并使用某种小部件包,那么在启动时,Android和iOS上的应用程序将看起来相同。
为了在平台上获得本机体验,您需要在正在运行的应用程序上手动测试平台。 如果是iOS,则将使用Cupertino Pack中的小部件;如果是Android,则将使用Material Pack中的小部件。 转换时也是如此:您可以为iOS激活向后滑动,但是在Android上将具有本机导航。
Alexei Kudryavtsev :包之间的切换如何进行? 您是否真的需要编写“如果使用iOS,请使用此”,“如果使用Android,请使用此”?
Evgeny Saturov :是的,完全正确。 在Google I / O上,我问Flutter开发人员为什么不从盒子中切换,在当前正在运行的平台内缝上一个支票,并自动设置小部件。 毕竟,人们期望跨平台的UI框架本身能够完成所有这些工作。 他们回答说,他们想让用户自由选择应用程序的外观。
鉴于有可能为您的设计系统编写品牌的窗口小部件包,因此您可以在两个平台上编写外观相同的应用程序。
关于Flutter内部
丹尼尔·波波夫(Daniil Popov) :那么,Flutter有自己的渲染引擎,可以独立绘制所有小部件?
叶夫根尼·萨图洛夫(Evgeny Saturov) :是的,但是“您的”并不是一个正确的词。 这就是Skia,这是一个众所周知的引擎,已经在Chrome,Firefox和许多其他浏览器中运行了很长时间。
实际上,Flutter团队是一个独立的Chromium团队。
开发人员的任务是将Chromium引擎超频到最大。 同时,不需要保留呈现html页面的功能。 在这种情况下,他们能够将其加速近二十倍,并开始思考如何处理这种结果。
显然,Web并不是此引擎的唯一应用程序,他们试图为移动开发做些事情。 收紧Skia,编写他们的小部件,我们得到了非常强大的应用程序。 然后,当我们可以编写功能完备的应用程序时,他们迭代地将其完成到当前状态,而细致的实现与本机应用程序无法区分。
Alexei Kudryavtsev :Flutter的幕后还有什么? 您能告诉我它还有什么其他内容吗,在那里可以进行优化的优化呢?
Evgeny Saturov :如果我们谈论平台本身的体系结构,则需要区分两个主要层。 基地写在“赞成”。 它包括Skia(可吸引所有这些美丽的图形引擎),完全从Android借用的文本引擎以及Dart VM。 第二层完全用Dart编写。 它包含所有小部件包:动画,手势处理,带有各种内容的Foundation Pack。 由于所有内容都是用Dart编写的,因此可以提供良好的性能。
我将立即插入5美分:如果您在此发行版之后决定尝试在Flutter上做某事,在Android Studio上安装该插件,收集第一个应用程序,并说您被残酷地欺骗了,因为一切进展缓慢,那么您将是对的。 这是在调试构建期间发生的,它实际上会减慢速度,动画会滞后,列表几乎无法滚动,并且应用程序的重量约为60 MB。 事实是,在首发版本中,您将获得大量的Dart VM。 这是针对即时重新编译功能的费用。 当您组装发行版本时,所有这些兆字节都会被狂风吹走,该应用程序将运行得更快,完全没有fps沉降。 这句话非常重要,不要吓到起步的Flutter开发人员。
Dart VM是一个单独的主题。 值得注意的是,主要贡献者是我们的俄罗斯开发人员Slava Egorov,他们与他们一起录制了
Flutter Dev Podcast的
发行版本 。 Dart VM使您可以在进行更改时快速更新代码。 这称为“热重装”-您对代码进行更改,单击按钮,一秒钟后,更改已在设备上可见。 这大大加快了开发速度,并在团队中营造了良好的氛围。
Alexei Kudryavtsev :在我看来,重要的是在热装过程中,保持流动状态非常重要。 在小型项目中很有趣。 但是当项目很大时,您移动了一个视图并等待十分钟。
叶夫根尼·萨图洛夫(Evgeny Saturov) :是的,我听到阿约斯尼科夫(Ayosnikov)的抱怨,说集会可能要花10至15分钟。
Flutter的一大优势就是收费。
我不知道在iOS中如何使用,但在Android中,收费是一种痛苦。 Android Studio的每次更新都会破坏某些功能,并且运行缓慢,需要不切实际的资源,最新的处理器和大量RAM。 Flutter立即提供轻量收费。 无需在Android Studio中工作,您可以下载VS Code,在其上安装插件,这足以进行开发。 我必须马上说,要与Flutter进行全面的工作,您仍然需要Apple设备,因为否则您将无法在iPhone上检查组装。
丹尼尔·波波夫(Daniil Popov) :您说过Flutter的发展是突飞猛进的,但是会因此而产生向后兼容性问题吗? 例如,我说服企业在Flutter上创建应用程序,我们进行了编写,调试,然后出现了Flutter或Dart的新版本,并且我们的代码无法编译,一切都崩溃了。 我坐在客户面前的水坑里。
Evgeny Saturov :这很可能会发生。 Flutter团队进行的UX民意测验是一件有趣的事情。
上次调查问:“您是否准备好以框架的简单性和纯净性为名而进行不支持的更改而又没有向后兼容性?” 超过80%的人说他们已经准备好了。
我不知道他们在回答问题之前是否考虑得好,以及结果的合理性,但是这种出版物的存在说明开发人员今后将允许不受支持的变更。 但是,ayosniki不习惯。 Swift已经被彻底更新了多少?
从哪里开始?
Daniil Popov :如果您决定自己尝试Flutter,该从哪里开始? 为了引起兴趣,我打开了Google的代码实验室,并提供了有关如何从Java迁移到Dart的具体示例。 iOS开发人员有这种事吗?
Evgeny Saturov :Flutter开发团队发布了一系列有关如何迁移到各种配置文件代表的文章。 有
针对Android开发人员的 Flutter,针对iOS开发 人员的 Flutter 。 我打开并看到例如“ Flutter中的UI视图等效于什么?” 或“我的情节提要在哪里?”。 所有这些问题都得到了回答。 我建议您从这些文章开始,它们都在Flutter文档中。
仍然需要谈谈如何将Dart作为Flutter的开发语言来结识朋友。
为此有一个
飞镖语言之旅 。 有Dart的所有基本概念。 但是,老实说,有些事情有很大的不同(特别是如果您更深入地研究),有些事情则丢失了,例如,函数重载,您仍然需要在行的末尾添加分号...
Alexey Kudryavtsev :是否有任何文档? 我可以在Twitter上关注谁? 中型博客?
Evgeny Saturov :当然,现在有很多信息。
Flutter网站上有有关如何设置开发环境,下载内容,要安装的SDK和插件的详细说明。 有一些代码字,它们很简单并且提供了相当丰富的信息,因为它们没有提供Flutter的百分之一。 但是首先,为了从原则上理解概念,代码实验室将这样做。 我不建议您仔细阅读所有内容,因为有些技巧非常棘手,可以将Google Maps集成到应用程序中。 这也很有趣,但是与真正的开发相比,键有很多麻烦。 通过前三个就足够了。 还有更多功能示例-带有假设的真实Whatsapp,Instagram应用程序的克隆。
Alexei Kudryavtsev :很棒,还有迁移说明。
Evgeny Saturov :是的,您可以看到现实中人们是如何完成我们在应用程序中经常看到的那些事情的。 它有助于入门。
此外,还有很多有关Udemy的付费课程,但我怀疑这是否必要。 我查看了它们的组成,所有这些信息(也许不是那么结构化)都可以绝对免费地找到。
我还建议使用
https://itsallwidgets.com/网站,该网站可让您立即在设备上安装展示应用程序(无论是否要在Flutter上进行开发,都无关紧要),并查看它们如何工作。 有一个用三个月编写的“
历史记录”应用程序。 这是绝对的粉丝,疯狂的动画。 您可以放大一个巨大的时间表,然后人类生活的各种情节开始出现。 每个都有自己的自定义动画。 没有本地库,一切都在Dart上完成。 在此站点上,您可以了解Flutter的功能:有专门用Dart编写的游戏,有Skia渲染的游戏,还有常规应用程序。
Flutter Create竞赛最近举行了:您必须编写自己的小型应用程序,条件是源(包括所有依赖项)的重量不得超过5Kb。 这位同伴赢了,他走了互动式的台阶,您可以在任何地方旋转,戳戳并查看真实的天气预报。 看起来完全不现实。 这些东西可以用来启发。
而且,您仍然可以使用发烧友在GitHub上创建的几个存储库。 它们都被称为同一个-很棒的颤振。 这些是所有样本,库,文章的集合。
关于信息资源。 我建议订阅
YouTube官方
频道 Flutter。 有定期出门演出的节目。
一周的Flutter Widget-每周都会详细介绍单个Widget,主要的应用案例和功能。
无聊的颤振开发表演是一种有趣的表演形式,持续了一个小时,并且无需编辑即可显示。 一直以来,参与者都在编码。 似乎他们做的工作没有太多准备,因为错误不断出现,他们尝试做某事,他们很愚蠢,他们不了解正在发生的事情。 观看这非常有趣。
如果您观看所有这些节目(相对来说很少),那么您可以成为一个完全不同的人,并相信您一生都在写Flutter。 他们提出了有趣的话题,人们面临的问题,并一路寻找解决方案。 它由Flutter的所有主要明星担任主角:
Emily Fortuna和
Andrew Brogdon 。 您可以在Twitter上订阅他们,他们正在积极发布。 您绝对应该订阅
Brian Egan ,它具有一个包含16个具有不同架构模式的样本的
存储库 。 当您已经在Flutter上进行编写时,这是必不可少的,并且在项目开始时,您需要选择将要使用的体系结构。 您只需要去Brian,他已经为您准备了一切。 这些家伙正在推动Flutter开发行业前进。
生产中颤动
Alexei Kudryavtsev :假设我是公司的技术总监。 在哪里可以找到Flutter开发人员?
Evgeny Saturov :就
像人一样 :电报中有开放的聊天室,已经有足够的人在Flutter上写东西了。 但是我要说的是,您不必寻找Dart开发人员。 语言是一种工具,它的无知不是雇用的障碍。 另一个问题是Flutter不仅仅是Dart代码。 您仍然需要访问平台。 这里的问题是:Android开发人员将如何快速确定如何在iOS上执行此操作,反之亦然,您的Web开发人员将如何快速确定它,以及如何在该处和该处执行。
当前,最均衡的Flutter开发团队由Android和iOS开发人员组成。
另一件事是,这并非总是可能实现的,因为ayosniki仍对Flutter保持警惕。
Alexei Kudryavtsev :Flutter如何在生产中使用? 您在工作室上写了多少个项目? 多少钱呢?
丹尼尔·波波夫(Daniil Popov) :除了您之外,还有谁在写它?
Evgeny Saturov :在我们的外包案例中,这
飞速发展 ,因为我们可以提供比两个本机应用程序更低的价格。 在本机框架存在的十年中,所有客户都习惯于默认情况下必须为同一工作支付两次费用,这非常昂贵,尤其是对于有钱的小公司而言。
对于他们来说,Flutter是救生员,就像任何跨平台一样,只是Flutter可以提供非常酷的结果。
并且已经有客户说:-我们只需要Flutter。 最近,这种情况越来越多。
我们仍在收集分析数据,因为我们已经完成了一个小型项目,我们选择了该项目作为试点。 事实证明,这比并行执行两个本机项目要快大约一半半。 应该记住,这是我们的第一次认真的经历,许多问题已经解决了很长时间。 理想情况下,您可以在较小的团队的力量下实现双倍速度增长。 并且不要忘记,那时将进行一半的调试,您将不必修复两个平台上的错误。
关于谁还在使用Flutter。 我最近发现,某些项目(当然不是旗舰项目)是在Grab的Odnoklassniki(东南亚出租车)中编写的,Uber最近购买了它。
总的趋势是:它与原生语言互操作,因此非常适合原型制作,适合进行实验。
Flutter iOS Android-, A\B , , , .
-, ( json, , ).
Flutter ? , , , , , . Flutter — UI, , , .
: ?
: , iOS - , Flutter , . ?
: iOS , , , -, GPU. , iOS- — CPU. , , Flutter, CPU, GPU. - . opengl . Flutter , .
: . , Flutter Engine, . , : APK , 64- . , -.
( ), , iOS- , X-Code ( ).
. Cupertino Widgets 70%. view controller — , . — , .
, , : , . , res, , . Flutter Dart-, . , .
Flutter
: Flutter, roadmap?
: ,
. Google I/O
Flutter for Web , Flutter- web- . Flutter Engine. , . roadmap — . , , .
, , — .
Flutter, , , , , .
, Flutter- . showcase Flutter Live, .
flutter-: . , , - developer preview, .
, Flutter . , , .
Release Notes , . , , , , , .
, , - , issues Flutter.
结论
: . Flutter , , . Xamarin, . , Flutter .
, Dart . , . , Dart — , . UI , Flutter.
: Android-, Flutter: « 2019 , , - , Flutter».
, , .
Flutter , AppsConf .