为什么原生应用开发者需要关注Flutter

Flutter是由谷歌创建的一个移动应用SDK,用于构建“现代移动应用”。目前它还处于alpha阶段,不过它的文档和相关工具十分齐全,有些移动应用已经在使用Flutter。

在这篇文章里,我将分享使用Flutter开发一个移动应用的愉快经历,并告诉大家为什么我这么喜欢Flutter。

背景简介

我开发了一个叫作“Chips of Fury”的扑克牌游戏(可以从Play StoreApp Store下载),如果你想和朋友们玩扑克牌游戏,但手头又没有扑克牌,那么就可以使用这款应用。这是一款多人游戏,要求参与游戏的多个设备之间支持实时同步,而且用到了大量的自定义UI元素。

我花了一个半月时间开发这款游戏,其中包括用在学习Flutter上的时间。之前也尝试过使用Android/Java和iOS/Swift来开发,但都无疾而终,主要是因为需要做太多繁琐的工作。而Flutter不仅帮助我加快开发速度,还让我坚持到了最后。所以,我现在成了Flutter的超级大粉丝!

我认为Flutter会成为移动开发的未来,个中缘由且听我慢慢说来。

1. 简单的Dart

当我跟其他开发者说起Flutter,他们会很诧异:“什么?Dart?”毕竟Dart跟其他语言(如Swift或Kotlin)比起来在语法方面并没有什么优势。

但其实Dart学起来很容易,根本不会成为入门Flutter的阻碍。请看下面的例子。

class Vehicle { final int numberOfWheels; final double mileage; final double horsePower; int speed = 0; Vehicle(this.numberOfWheels, this.mileage, this.horsePower); void accelerate() { speed = speed + 1; } void decelerate() { speed = speed - 1; } void brake() { speed = 0; } }

可以看出,Dart的语法与其他面向对象编程语言没有什么太大差别,虽然也存在一些特定的语法,但整体的学习曲线还是很平缓的。

况且,谷歌选择Dart也是有原因的。Flutter需要不断快速地创建和销毁短生命周期对象,Dart的垃圾回收机制非常适合用于完成这项任务。

2. 高效的Dart

Android或iOS开发者应该很熟悉下面的IDE工作流:

为什么原生应用开发者需要关注Flutter

当然,也很熟悉下面的这些标记或代码:

为什么原生应用开发者需要关注Flutter

在Flutter里,界面布局直接通过Dart编码来定义,不需要使用XML或模板语言,也不需要使用可视化设计器之类的工具。

说到这里,大家可能会一脸茫然,就像我当初的反应一样。使用可视化工具不是更容易吗?如果把所有的逻辑都写到代码里不是会让事情变复杂吗?

其实不然,请看下面的例子。

首先,Flutter提供了热加载功能(Hot Reload)。

下图左边是代码,这些代码足以用于运行一个应用。右边是模拟器,自定义了一个布局,包括顶部和底部的栏位以及中间的内容容器。

为什么原生应用开发者需要关注Flutter

这里不需要布局用的XML文件,也没有xib等文件。在左边修改代码,可以立即热加载到右边的模拟器上。热加载还能保持应用的状态,所以在热加载之后不需要重新导航到之前的页面。这比Android的Instant Run不知道要领先多少年。对于大型的应用同样适用。如此快的速度,正是Dart的优势所在。

在Flutter中进行布局要比在Android/XCode中快得多。

3. 反应式的Flutter

假设要实现下列的应用:

为什么原生应用开发者需要关注Flutter

如果按照命令式的编程风格,可能是这样实现的:

为什么原生应用开发者需要关注Flutter

我们需要为文本框和下拉列表添加监听器,在发生事件变更时,先获取文本标签再调用相关的方法进行赋值。

在Android或iOS的公共API里,View的setter和getter方法不计其数,光是TextView就有259个这样的方法,另外还有4个构造函数。所以在设置这些部件的属性时真是一件让人头疼的事情。

而反应式的编程风格会这样来实现:

为什么原生应用开发者需要关注Flutter

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9b91c682d4a1a4883bec806a9e8e4d87.html