前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解读 Flutter 全平台开发的误解与偏见

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

作者头像
GSYTech
修改2023-09-24 20:16:34
1.3K0
修改2023-09-24 20:16:34
举报
文章被收录于专栏:移动开发之家移动开发之家

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 可以有不错的性能和跨平台能力。

image

1.1、 Web

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

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

image.png

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

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

image

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

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

image

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

1.2、Desktop

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

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

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

%E6%9C%AA%E5%91%BD%E5%90%8D.gif

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Flutter 制霸全平台
    • 1.1、 Web
      • 1.2、Desktop
      相关产品与服务
      云开发 CloudBase
      云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档