从0到1掌握Flutter(一)Flutter与移动端跨平台

一、Flutter介绍

1.1 什么是flutter?

Flutter是一款由 Google 开发供支持的跨平台开源框架。

在2018年发布时Flutter主要被用于移动端跨平台开发,Flutter3.0发布以后,支持在六个平台上进行应用程序开发:iOS、Android、Web、Windows、MacOS 和 Linux。

尽管多平台适配能力不断提升,iOS和Android仍是其核心应用场景:

  • 移动端支持最成熟

  • 社区资源最丰富

  • 性能优化最彻底

本文也将以移动端视角展开讨论

Flutter无论从开发效率、性能表现,还是从企业成本的角度来看,Flutter 都提供了独特的解决方案。接下来我们来看一下为什么 Flutter 能够成为开发者的首选框架,以及它如何在实际项目中创造价值。

1.2 为什么要使用Flutter?

在传统的原生开发中,通常我们需要维护Android和iOS两个开发团队,导致版本迭代时的人力和测试成本加大。对一线的开发者来说,也许并不太关注这个问题。

但是,如果从公司的角度出发,有一套可以直接开发出Android的apk和iOS的代码,意味着公司只需要一个团队就能维护这套代码。这样就能在人力成本上节省开支。而在开发方面,这套代码能有效实现复用,简化测试,并统一UI风格。

而Flutter就是这样一个能帮我们实现跨平台开发的框架,它可以帮助你:

  • 提高开发效率

    • 同一份代码开发iOS和Android

    • 用更少的代码做更多的事情

    • 轻松迭代

      • 在应用程序运行时更改代码并重新加载(通过热重载)

      • 修复崩溃并继续从应用程序停止的地方进行调试

  • 创建美观,高度定制的用户体验

    • 受益于使用Flutter框架提供的丰富的Material Design和Cupertino(iOS风格)的widget

    • 实现定制、美观、品牌驱动的设计,而不受原生控件的限制

(图片来自 Flutter中文网介绍)

Flutter 的这些优势不仅体现在技术层面,更在实际应用中得到了广泛验证。

随着越来越多的企业和开发者选择 Flutter,它在行业中的地位和影响力也日益凸显。

1.3 Flutter的地位和影响

“Apptopia 跟踪 Apple AppStore 和 Google Play Store 中的数百万个应用,并分析和检测哪些开发人员 SDK 用于创建这些应用,Flutter 是跟踪的最受欢迎的 SDK 之一:在 Apple AppStore 中 它的使用量从 2021 年所有跟踪免费应用的 10% 左右稳步增长到 2024 年所有跟踪免费应用的近 30%!

Flutter官方最新统计数据显示:

  • 开发者基数:月活跃开发者突破100万大关

  • 市场渗透率:支撑近30%新发布iOS应用(数据源: Apptopia Inc.

  • 社区规模:覆盖全球60+国家/地区,累计9万开发者参与本地社区活动

另外,根据行业调研显示,国内头部互联网企业已普遍将Flutter应用于核心业务场景:

字节跳动(今日头条)、腾讯(微信生态工具)、阿里巴巴(闲鱼)、美团等企业的关键产品线均已深度集成Flutter框架。这些技术选型决策印证了Flutter在实现高性能渲染、保持跨端UI一致性、支持动态化更新等核心能力上的技术优势。

(图片来自Flutter官网 showcase)

Flutter 的崛起并非偶然,而是移动开发技术演进的必然结果。要理解 Flutter 的价值,我们需要回溯跨平台技术的发展历程。这段进化史不仅揭示了技术发展的内在逻辑,也为我们理解 Flutter 的设计理念提供了重要背景。

二、跨平台的进化史

2.1 原生开发

原生开发作为移动开发的"黄金标准",其不可替代的核心优势主要体现在:

  • 极致性能:极致流畅体验

    • 渲染性能:直接调用Skia/Quartz 2D图形引擎,高帧率运行

    • 线程优化:精细控制UI线程与后台线程,避免卡顿掉帧

    • 内存管理:原生GC机制与平台深度集成,内存回收更及时

  • 硬件支持:深度系统集成

    • 新特性支持:直接支持5G/蓝牙5.0/NFC等硬件能力

    • 传感器访问:精准获取陀螺仪、气压计等数据

    • 相机控制:支持手动对焦、RAW格式等专业模式

    • 权限管理:细粒度控制硬件访问权限

    • GPU加速:Metal/Vulkan图形API直接调用

然而,如果把移动开发比作造车,早期原生开发就像同时维护两条独立生产线——Android和iOS工程师如同分别制造燃油车和电动车,每个螺丝都要拧两遍。产品经理说:'这个动效Android和iOS能不能做得一模一样?' 就像要求油车和电车引擎声要同步轰鸣。

有一个典型痛点场景,当产品提出"修改全局圆角半径"需求时:

  1. Android端需修改 res/values/dimens.xml

  2. iOS端要调整 UIView.layer.cornerRadius 全局配置

  3. 两边各自测试+走查耗时 ≈ 2人日

这些痛点促使开发者们寻求更高效的解决方案,跨平台技术正是在这样的背景下应运而生,开启了移动开发的新阶段。

2.2 Web混合开发

当Android与iOS还在争夺移动市场时,Adobe的PhoneGap(后开源为Cordova)率先给出跨平台方案。PhoneGap是一个快速开发平台,允许开发者使用HTML、CSS和JavaScript等Web技术来创建跨平台的移动应用程序。这个方案的核心思路颇具巧思——将Web技术嵌入原生容器。其架构可拆解为三个关键层:

  1. Web层:HTML/CSS构建界面,JS处理逻辑

  2. 桥接层:JsBridge实现双向通信

  3. 原生层:通过插件机制扩展设备能力

这套看似简单的架构,却带来了三重变革性优势

  1. 开发效率飞跃:复用Web技术栈,前端开发者转型使成本大幅降低

  2. 动态更新能力:服务端热更新HTML,紧急修复无需发版审核

  3. 跨平台一致性:统一CSS适配方案,双端UI差异率低

尽管PhoneGap/Cordova提供了跨平台的便利,但也面临一些性能上的挑战。

  1. Android的WebView组件渲染效率相对较低

  2. JavaScript作为解释型语言,其执行性能也不如编译型语言。这意味着在执行复杂任务时,性能可能会受到限制。

  3. 由于Android系统自身的内存管理问题,WebView在使用过程中消耗的内存无法在不需要时及时回收,这可能导致内存泄漏和最终的OOM。

因此,尽管PhoneGap/Cordova为跨平台开发提供了极大的便利,但在实际应用中仍需注意其性能瓶颈和内存管理问题,以确保应用的稳定性和用户体验。

这意味着需要更彻底的架构革新,而不是将Web嵌入原生,而是让原生组件能被动态编排。正是这种认知转变,为React Native的出现铺平了道路。

2.3 React Native

当WebView方案的性能天花板愈发明显时,Facebook在React Web框架大获成功的背景下,推出了移动端革命性方案——React Native(RN)。

在RN的工作机制中,开发者编写的仍然是JavaScript代码。这些代码首先被用来构建一个Virtual DOM,随后通过Bridge将这个虚拟DOM传递给原生层进行UI的创建和渲染。

这一流程与原生开发中的XML布局解析过程颇为相似:

  • 在原生开发中,开发者编写XML布局文件,然后由Java对这些布局文件进行解析,并通过反射机制创建对应的视图组件。

  • 而在RN中,这一布局配置任务由JS代码承担。

// JSX声明 
<View style={styles.container}>
 <Text>Hello World</Text> 
</View> 

// 实际映射过程 
// Android端: 
JS View → android.view.ViewGroup 
JS Text → android.widget.TextView 

// iOS端:
JS View → UIView 
JS Text → UILabel

两种开发方式对比:

开发方式

Android原生开发

React Native

UI编码

XML布局文件

JSX组件树

解析引擎

LayoutInflater

Yoga布局引擎

组件创建

反射实例化View对象

映射为各平台的组件

更新机制

直接修改View属性

虚拟DOM Diff后批量通过Bridge更新

然而,与原生开发中的静态XML布局不同,RN中的UI更新需要通过Bridge再次进行数据传输。同样地,在RN中调用原生API也需要通过Bridge进行传递。这种频繁的跨桥调用无疑增加了通信成本,使得RN的性能无法完全媲美原生应用。这推动着跨平台技术向无桥接架构进化,而Flutter正是这个进化方向的终极答案...

2.4 Flutter

当React Native还在通过Bridge与原生组件交互时,Flutter选择了一条更彻底的技术路径。与RN类似,Flutter也旨在解决跨平台开发中的性能瓶颈和代码复用问题,但它采取了一种截然不同的策略——完全自主的渲染体系

这种方案的核心在于:

  1. 语言革新:采用Dart语言,通过Dart虚拟机(DVM)实现JIT(即时编译)与AOT(预编译)的双模式支持,兼顾开发效率与运行性能。

  2. 渲染自主:基于高度优化的2D渲染引擎——Skia直接控制像素绘制,无需依赖平台控件,确保跨平台渲染一致性。

  3. 架构统一:从UI描述到渲染执行的全链路控制,DVM作为核心执行引擎,负责Dart代码的高效运行和资源管理。

Flutter采用清晰的两层架构设计:

  1. Framework层

    1. 提供Widget、动画等开发接口

    2. 实现响应式编程模型

    3. 处理手势识别等交互逻辑

  2. Engine层

    1. Dart运行时环境(包含Dart VM)

    2. Skia图形渲染引擎

    3. 平台通道等原生交互接口

Flutter的工作流程可概括为以下关键步骤:

  1. UI开发:开发者使用Dart语言编写Widget树,定义界面结构和行为逻辑。这些代码会被编译为高效的中间表示形式(即DVM的字节码)。

  2. 渲染指令生成:Flutter引擎将Widget树转换为具体的渲染指令,包括布局计算、图层合成等操作。这一过程由Skia图形引擎执行硬件加速渲染。

  3. 平台适配:通过平台嵌入层将渲染结果适配到各平台的原生视图系统,同时处理输入事件和系统服务调用。这一层负责与Android的Surface、iOS的CALayer等原生图形接口对接。

Dart语言与Skia这一组合使得Flutter能够以一种几乎接近原生的方式,在iOS和Android平台上呈现UI界面,同时保持了代码的完全一致性和高效性。

总结

Flutter的出现是跨平台技术发展的必然结果。传统方案如React Native受限于Bridge的性能瓶颈,难以突破性能与体验的天花板。而Flutter通过创新的架构设计,在开发阶段利用JIT编译支持热重载,显著提升开发效率;在发布时通过AOT编译为原生机器码、无桥接架构实现媲美原生的运行性能。

从设计层面看,Flutter提供了完善的Widget体系,开发者可以轻松实现Material Design和Cupertino风格的UI效果,同时保持高度的定制灵活性。

作为Google官方力推的跨平台方案,Flutter拥有更规范的生态和更强的平台支持。这种官方背景不仅确保了技术的长期演进,也降低了因平台政策变动带来的风险(如iOS热更新限制)。

总之,Flutter 的出现为跨平台开发提供了一种不错的解决方案。它在开发效率、性能表现和跨端一致性之间找到了较好的平衡,同时通过丰富的组件库和活跃的社区支持,为开发者提供了更多可能性。随着技术的不断成熟,Flutter 正在成为跨平台开发领域的一个重要选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值