解读 Flutter 全平台开发的误解与偏见

莎利亚 等级 402 0 0

Flutter 2.0 发布之后,Web 版本进入了 stable 分支,Desktop 版本也可以在 stable 分支通过 snapshot beta 镜像开始预览使用,导致最近关于 “Flutter 制霸全平台” 之类的话题又被炒作起来,所以本篇主要对这个话题做一次解答。

1、Flutter 制霸全平台

谷歌官方在 Flutter 2.0 的发布上说过:「“每个应用程序都可以通过 Flutter 2 进行免升级,因为它们现在可以在不重写的情况下扩展到 Desktop 和 Web ” 。」

事实上 Flutter 在 Android 和 iOS 平台上的兼容和适配确实很不错,但是对于 Web 和 Desktop 目前来说显然不是如此,“不重写下扩展”这话估计谷歌自己都不信。

首先 “不重写的情况下扩展到 Desktop 和 Web” 就很不现实 ,为什么呢我们后面分析,这里先说下 Flutter 的核心设计,了解过 Flutter 实现原理的应该知道, Flutter 的核心设计是 :

「平台只需要提供 Sufrace ,然后剩余的控件和渲染逻辑都由 Engine 来完成,而 Engine 直接与 GPU 交互,控件也和所在平台没有关系,所以 Flutter 可以有不错的性能和跨平台能力。」

解读 Flutter 全平台开发的误解与偏见

1.1、 Web

但是 Flutter 在 Web 上却并非完全如前面所述那样,「因为 Web 下的浏览器 JS/CSS/HTML 霸权是不可撼动的」,所以 Flutter 一开始在 Web 上会通过 HtmlCanvas 来转化为浏览器的原生标签。

这有什么问题?这就表示 「Flutter 需要和 “Web 原生有不同程度的耦合关系”」,从而造成了代码在不同平台的表现形式和 API 的兼容能力都会有所不同,而 Flutter 应对 Web 的这种情况,「使用了大量的自定义标签,从而导致在大小、性能和体验上都还不是很好。」

解读 Flutter 全平台开发的误解与偏见

当然 Flutter 还提供了另外一种 Web 渲染能力,更接近 Mobile 和 Desktop 的 CanvasKit 渲染模式,CanvasKit 相当于是基于 WebGL 版本的 Skia 渲染,这种模式下性能肯定会更好,但是需要做的兼容和适配工作量也更大。

flutter web 编译是可以通过 --web-renderer 指定渲染模式,现在模式是 auto 模式,也就是在手机浏览器使用 HTML renderer, 在 PC 浏览器使用 CanvasKit renderer。

解读 Flutter 全平台开发的误解与偏见

当然说那么多我的意思并不是为了贬低 Web ,这里只是想表达 「Flutter Web 并不是也不能干掉前端开发,更不足以挑战 React、Vue 的地位」,它更多的是 Flutter 的一种能力拓展:

Flutter 开发者恰好写了一个 App 或者 Desktop 的页面,那么顺手把它打包成 Web 用起来,虽然体验不好但是又不是不能用的场景。

解读 Flutter 全平台开发的误解与偏见

所以至少短时间内 Flutter Web 在前端领域就是“弟弟”,别说制霸了,能猥琐发育就很难得了。

1.2、Desktop

在 PC 领域 Flutter 表现还是可以的,因为它和手机端具备类似的渲染逻辑,而对于 PC 端 Flutter 主要的考验还是控件体验和插件支持的问题上。

因为不同于手机,桌面端大部分时候界面布局和手机端本身就存在较大差异,甚至桌面端的界面通常是可大小调节,另外桌面端应用的输入和控件焦点主要来源于鼠标,「所以回归到最前面的那段话“不重写的情况下扩展到 Desktop 和 Web” 就很不现实。」

那么有没有办法让界面同时适配 PC 和 Mobile 呢?还真有,比如 ResponsiveFramework 就是用于实现这种需求的,当然这种实现需要消耗性能和时间成本。

解读 Flutter 全平台开发的误解与偏见

另外 PC 和 Mobile 还是存在一些通用的场景,比如实现类型 2B 产品的像飞书系列的应用,在关于小程序的功能和那个,可以做到同一套逻辑在手机和 PC 端更有效率的同步发布,同时还可能拥有不错的性能。

最后 Flutter 对于 ReorderableListViewTextFieldTextFormField 等控件上也在 2.0 开始增加了增对桌面端的体验,不过还是那句话,Flutter 在 PC 领域的路才刚刚开始,制霸是不可能制霸的,不过在 PC 端的未来确实会比 Web 更明朗。

  • Electron 打包方案的主要贡献者,创建了 squirrel-flutter
  • Ubuntu 的 installer 使用了用 Flutter
  • 微软正在继续扩大对 Flutter 的支持 《Announcing Flutter support for foldable devices》

经历过多端开发的才明白一套代码在多端上通用的成本有多高,跨平台能够在 Android 和 iOS 上高性能低耦合的实现已经很难得了,如果想无缝拓展到 Web 和 Desktop 只会自己挖坑埋自己,所以 「部分逻辑全平台,实际项目分平台我觉得才是 Flutter 多平台的未来」

最后

为了让大家更好的去学习和提升自己,我和几位大佬一起收录整理的 Flutter进阶资料以及Android学习PDF+架构视频+面试文档+源码笔记 ,并且还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料……

这些都是我闲暇时还会反复翻阅的精品资料。可以有效的帮助大家掌握知识、理解原理。当然你也可以拿去查漏补缺,提升自身的竞争力。
如果你有需要的话,可以前往 GitHub 自行查阅。

解读 Flutter 全平台开发的误解与偏见

image

本文转自 https://www.jianshu.com/p/3527a8e8271e,如有侵权,请联系删除。

收藏
评论区

相关推荐

flutter -- dart基础之dart简介和安装
Dart介绍: Dart是由谷歌开发的计算机编程语言,它可以被用于web、服务器、移动应用 和物联网等领域的开发。 Dart诞生于2011年,号称要取代JavaScript。但是过去的几年中一直不温不火。直到Flutter的出现现在被人们重新重视。 要学Flutter的话我们必须首先得会Dart。 da
震惊!!Flutter 2 来了!
{{{width300}}} 作者 | Flutter 官方博客 译者 | 核子可乐 策划
Flutter 2 正式发布!
昨天凌晨,Flutter 2 正式发布: 开发者为_任何_平台创建美观、快速且可移植应用的能力得以更上一层楼。通过 Flutter 2,您可以使用相同的代码库为五种操作系统构建原生应用: iOS、Android、Windows、macOS 和 Linux;以及为 Chrome、Firefox、Safari 和 Edge 等浏览器打造 web 体验。Flutt
带你全面了解 Flutter,它好在哪里?它的坑在哪里? 应该怎么学?
回顾了这段时间解答关于 Flutter 的各种问题后,我突然发现很多刚刚接触 Flutter 的萌新,对于 Flutter 都有着不同程度的误解,而每次重复的解释又十分浪费时间,最终我还是决定写篇文章来做个总结。 内容有点长,但是相信能帮你更好地去认识 Flutter 。 Flutter 的起源 Flutter 的诞生其实比较有意思,Flutter
可以用Flutter愉快的开发web 了
简单的试了一下,完全用flutter现有的widget进行开发。github上面有说现在是preview版本,有些widget还不能用。但是最终是会支持整个的flutter现有的UI的。 跟用flutter开发原生app一样。flutter_web还有很长的一段路要走。希望年底能出个像样的版本。 不支持第三方库说明 目前pub.da
Flutter 移动应用开发指南
Flutter 移动应用开发指南 Flutter 作为新一代的跨平台 UI 框架,已经在 Android 和 iOS 移动平台被广泛使用,未来还会进一步扩展到 Web、桌面和嵌入式等平台。只要编写一次代码,就可处处运行,真正做到了全屏制霸。本文将通过从零开发一个类似抖音的短视频应用来展示 Flutter 应用的完整开发过程,以及它的强大性和易用性。
Flutter之全埋点思考与实现
1\. 背景 用户数据分析与埋点,在互联网产品的设计与迭代中是不可缺少的一部分,利用用户的行为规律、用户画像,能在很大程度上帮助团队制定合适的运营策略与产品方向。 随着产品的迭代与业务的发展,对业务团队的敏捷性与创新性提出了更高的要求,而通过大数据的手段在一定程度上可以帮助我们实现这个愿景,同时,良好的数据分析可以帮助我们进行更好更优的决策
【Flutter实战】初识Flutter
1.2 初识Flutter 1.2.1 Flutter简介Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口,开发者可以很快地为 Flutter添加 native扩展。同时 Flu
【Flutter 实战】安装Flutter
1.3 搭建Flutter开发环境工欲善其事必先利其器,本节首先会分别介绍一下在Windows和macOS下Flutter SDK的安装,然后再介绍一下配IDE和模拟器的使用。 1.3.1 安装Flutter由于Flutter会同时构建Android和IOS两个平台的发布包,所以Flutter同时依赖Android SDK和iOS SDK,在安装Fl
解读 Flutter 全平台开发的误解与偏见
Flutter 2.0 发布之后,Web 版本进入了 stable 分支,Desktop 版本也可以在 stable 分支通过 snapshot beta 镜像开始预览使用,导致最近关于 “Flutter 制霸全平台” 之类的话题又被炒作起来,所以本篇主要对这个话题做一次解答。1、Flutter 制霸全平台谷歌官方在 F
PHP Cookie与Session的使用与区别
Cookie与SessionCookie和session是目前使用的两种存储机制。cookie是从一个WEB页到下一个WEB页面的数据传送方法,cookie存储在客户端;Session是让数据在页面中持续有效的一个传递方法,session存储在服务器端。掌握了cookie与session这两个技术,在WEB网站页面间信息传递的安全性是
【Flutter实战】层叠布局(Stack、Positioned)
4.5 层叠布局 Stack、Positioned层叠布局和Web中的绝对定位、Android中的Frame布局是相似的,子组件可以根据距父容器四个角的位置来确定自身的位置。绝对定位允许子组件堆叠起来(按照代码中声明的顺序)。Flutter中使用Stack和Positioned这两个组件来配合实现绝对定位。Stack允许子组件堆叠,而Pos
Flutter - 深入理解Flutter动画原理
基于Flutter 1.5,从源码视角来深入剖析flutter动画原理,相关源码目录见文末附录一、概述动画效果对于系统的用户体验非常重要,好的动画能让用户感觉界面更加顺畅,提升用户体验。 1.1 动画类型Flutter动画大的分类来说主要分为两大类: 补间动画:给定初值与终值,系统自动补齐中间帧的动画 物理动画:遵循物理学定律
Flutter - 深入理解Flutter引擎启动
基于Flutter 1.5,从源码视角来深入剖析flutter引擎的启动流程,相关源码目录见文末附录一、Flutter引擎启动工作 1.1 Flutter启动概览Flutter作为一款跨平台的框架,可以运行在Android、iOS等平台,Android为例讲解如何从Android应用启动流程中衔接到Flutter框架,
字节跳动为什么选用Flutter:并非跨平台终极之选,但它可能是不一样的未来
2018 年 12 月 ,Google 宣布 Flutter 1.0 版本正式发布。截至目前, Flutter 在 Github 上已获得 88000+ 的关注和 11000+ 的 Fork ,其发展速度相当惊人,是今年移动端最火热的开发框架之一。Flutter 大火背后的原因是什么?为什么越来越多的企业和开发者会选择使用 Flutter?Flutter 会