Flutter2.0发布之后,Web版本进入了stable分支,Desktop版本也可以在stable分支通过snapshotbeta镜像开始预览使用,导致最近关于“Flutter制霸全平台”之类的话题又被炒作起来,所以本篇主要对这个话题做一次解答。
1、Flutter制霸全平台谷歌官方在Flutter2.0的发布上说过:“每个应用程序都可以通过Flutter2进行免升级,因为它们现在可以在不重写的情况下扩展到Desktop和Web”。
事实上Flutter在Android和iOS平台上的兼容和适配确实很不错,但是对于Web和Desktop目前来说显然不是如此,“不重写下扩展”这话估计谷歌自己都不信。
首先“不重写的情况下扩展到Desktop和Web”就很不现实,为什么呢我们后面分析,这里先说下Flutter的核心设计,了解过Flutter实现原理的应该知道,Flutter的核心设计是:
平台只需要提供Sufrace,然后剩余的控件和渲染逻辑都由Engine来完成,而Engine直接于GPU交互,控件也和所在平台没有关系,所以Flutter可以有不错的性能和跨平台能力。
1.1、Web但是Flutter在Web上却并非完全如前面所述那样,因为Web下的浏览器JS/CSS/HTML霸权是不可撼动的,所以Flutter一开始在Web上会通过HtmlCanvas来转化为浏览器的原生标签。
这有什么问题?这就表示Flutter需要和“Web原生有不同程度的耦合关系”,从而造成了代码在不同平台的表现形式和API的兼容能力都会有所不同,而Flutter应对Web的这种情况,使用了大量的自定义标签,从而导致在大小、性能和体验上都还不是很好。
当然Flutter还提供了另外一种Web渲染能力,更接近Mobile和Desktop的CanvasKit渲染模式,CanvasKit相当于是基于WebGL版本的Skia渲染,这种模式下性能肯定会更好,但是需要做的兼容和适配工作量也更大。
flutterweb编译是可以通过--web-renderer指定渲染模式,现在模式是auto模式,也就是在手机浏览器使用HTMLrenderer,在PC浏览器使用CanvasKitrenderer。
当然说那么多我的意思并不是为了贬低Web,这里只是想表达FlutterWeb并不是也不能干掉前端开发,更不足以挑战React、Vue的地位,它更多的是Flutter的一种能力拓展:
Flutter开发者恰好写了一个App或者Desktop的页面,那么顺手把它打包成Web用起来,虽然体验不好但是又不是不能用的场景。
所以至少短时间内FlutterWeb在前端领域就是“弟弟”,别说制霸了,能猥琐发育就很难得了。
1.2、Desktop在PC领域Flutter表现还是可以的,因为它和手机端具备类似的渲染逻辑,而对于PC端Flutter主要的考验还是控件体验和插件支持的问题上。
因为不同于手机,桌面端大部分时候界面布局和手机端本身就存在较大差异,甚至桌面端的界面通常是可大小调节,另外桌面端应用的输入和控件焦点主要来源于鼠标,所以回归到最前面的那段话“不重写的情况下扩展到Desktop和Web”就很不现实。
那么有没有办法让界面同时适配PC和Mobile呢?还真有,比如ResponsiveFramework就是用于实现这种需求的,当然这种实现需要消耗性能和时间成本。
另外PC和Mobile还是存在一些通用的场景,比如实现类型2B产品的像飞书系列的应用,在关于小程序的功能和那个,可以做到同一套逻辑在手机和PC端更有效率的同步发布,同时还可能拥有不错的性能。最后Flutter对于ReorderableListView、TextField和TextFormField等控件上也在2.0开始增加了增对桌面端的体验,不过还是那句话,Flutter在PC领域的路才刚刚开始,制霸是不可能制霸的,不过在PC端的未来确实会比Web更明朗。
Electron打包方案的主要贡献者,创建了squirrel-flutterUbuntu的installer使用了用Flutter微软正在继续扩大对Flutter的支持《AnnouncingFluttersupportforfoldabledevices》经历过多端开发的才明白一套代码在多端上通用的成本有多高,跨平台能够在Android和iOS上高性能低耦合的实现已经很难得了,如果想无缝拓展到Web和Desktop只会自己挖坑埋自己,所以部分逻辑全平台,实际项目分平台我觉得才是Flutter多平台的未来。
-EOF-
推荐阅读点击标题可跳转1、安利篇:Kotlin高阶函数与特性,让代码飞起
2、7个你应该知道的Gradle实用技巧
3、我们饭碗保住了!谷歌胜,甲骨文败
看完本文有收获?请分享给更多人
推荐