设为首页 加入收藏

TOP

为什么原生应用开发者需要关注Flutter
2017-12-06 17:36:04 】 浏览:354
Tags:为什么 原生 应用 开发者 需要 关注 Flutter

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


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


背景简介


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


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


1. 简单的Dart


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


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


可以看出,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


我们为文本框和下拉列表添加监听器,当发生事件变更时,在“全局状态”里更新这些值,并让Flutter进行UI重绘。Flutter将自动更新文本标签的值。


4. 一切都是部件(widget)


在Android和iOS上,部件所对应的就是各种View类。


Flutter采用了不同的概念,部件不仅仅是结构化的元素。Flutter的部件架构更多地使用了组合,而不是继承,所以部件架构更加强大和灵活。Flutter官方文档写道:


在Flutter里,行为也是部件(如GestureDetector)。InheritedWidget可用于进行状态管理,AnimatedWidget可用于构建动画。


遵循组合大于集成的原则,Flutter从简单的元部件开始,可以构建出非常复杂的部件。Flutter的Container Widget就是由一系列元部件组成的。


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


5. 和Activity生命周期管理说再见


我想没有人会喜欢把时间花在Activity(或Fragment、ViewController)的生命周期管理上。对于我来说,Activity中Fragment的异步数据加载和本地状态管理是一个很大的负担。


但在Flutter里,这些东西都消失了。


6. 稳定的60帧频


Flutter的应用被编译成本地代码,所以性能方面不存在问题。事实上,我认为它比Java或Swift更适合用来开发游戏应用。使用反应式编程风格开发的UI代码更加清晰,再加上良好的性能,非常适合用来开发游戏。


来自谷歌的@wmleler1写了一篇文章解释为什么Flutter的渲染速度会这么快:https://hackernoon.com/whats-revolutionary-about-flutter-946915b09514


为了体验Flutter的速度,可以试着安装这款Flutter图库应用:https://play.google.com/store/apps/details?id=io.flutter.gallery。


iOS版的需要自己从源代码构建:https://github.com/flutter/flutter/tree/master/examples/flutter_gallery


7. 同时支持Android和iOS


这个就不用多说了。


8. Flutter社区


Flutter处于alpha阶段,不过社区已经为它提供很好的支持。Flutter gitter channel为新手和有经验的开发者提供了交流渠道,很多问题可以在这里得到快速解答。


Flutter还很年轻,所以肯定会存在一些局限和已知问题,而且未知的问题也会越来越多。Flutter开发团队正努力解决这些问题。下面列出了几个已知问题:


查看原文Why native app developers should take a serious look at Flutter


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇你需要知道的CSS-in-JS 下一篇SpringMVC中的适配器(适配者模式..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目