鉴于我是一个iOS开发者,所以书写的风格会更接近Swift风格.
差不多花了一周的时间,这一周除了吃饭睡觉,其他时间我都在持续编写这个Flutter项目.
目前看来,基本功能都已经完成了.

心得

说句实话,作为一个iOS开发,其实我打一开始是有些拒绝Flutter的.
大概是去年4月份的样子,开发的领导说要我们研究一下Flutter,当时看着这种声明式的语法和无尽的括号,我就没怎么动力往下继续写下去了.
然后,大家都知道了,去年6月的WWDC大会,SwiftUI横空出世.
这意味着整个大前端都是在向声明式编程演进,迟早,它一定会替代现有的编程模式.
Android我不是特别熟悉(Java->Kotlin->ComposeUI),也就不敢随意说,苹果从OC->Swift->SwiftUI,只用了短短几年的时间,我也从写OC到写Swift,然后学习SwiftUI.

SwiftUI我学了一段时间后,目前暂时属于搁置状态,如果你要我说一个理由,那我必须说,iOS13才能支持,目前学习了很难实战,而且SwiftUI在某些方面也不是特别成熟,比如涉及BLoC思想的框架都很少,学了如果继续使用当前的思路进行编码也没什么意义.
加上现有的教学视频或者教程,基本都是告诉你如何写UI,UI是App的一部分.重点是SwiftUI中UI = f(State)的整体架构太少,也没有什么特别好的开源项目.(当然可能是我读书少,如果你知道有特别好的SwiftUI的项目请记得告诉我)

学Flutter,必然会接触Dart语言,也避免不了和Swift进行比较.

这个真的不是我吹,和Swift比,从语言的易用性和简洁性对比,目前真的没有可以和Swift相比的.

Dart语言当然有它的优势,同时支持JIT和AOT,才保证了Hot Reload的便捷,相比较Swift只支持AOT,别看SwiftUI也支持既见既所得,其实还是在跑一个环境才得以支撑,也是非常消耗性能的.

Flutter编程模式下有Debug和Release模式,有些调试环节,千万不要被Debug模式蒙蔽了双眼,有些场景在Debug下就是跑着卡,但是Release模式就是顺滑,究其原因,Debug模式下的Dart VM消耗了太多的资源.

Dart语言的枚举是羸弱的,既不支持枚举中嵌套枚举,也不支持带参数的枚举,这对于由状态决定UI的声明式语言,无疑是阻碍.给我的感觉就是这和OC的枚举有啥区别,除了switch支持字符串之外,真的功能性太少了.

反而看看Swift的枚举,你就会知道枚举原来可以玩出逆天的效果,当然我相信Kotlin也会如此.

Dart语言更多的遗留着Java语言的模式,你可以在一个类后面extends/implement/with,以至于可能你就会迷失其中.介于Dart没有所谓的Interface一说,也许你新建了虚基类,都不知道某个类到底是继承这个虚基类还是实现这个虚基类.而在Swift中一个:就轻描淡写的化解了所有问题,无论你是继承或者是实现接口(协议).

转过头来看,Dart的发布时间早于Swift,所以Swift也或多或少借鉴了Dart语言的一些思维(个人认为Swift借鉴Python最多,学完Swift,Python基本就会了),以致于我一言不和就写个var(Swift中let才是让人最安心的),再一言不和就来个??,在Swift中习惯了的语法,能在Dart这里继续使用还是挺好的.

我个人觉得Flutter中的push和pop功能真的很强大,所以我在登录与注册页面做了大量的调试,而且页面间的相互传值,iOS原生动不动就要写个闭包回传,Flutter要方便很多,直接await异步等回调即可.协程的写法真的是让人用了就不想回去的产物.

对于一个常年使用SnapKit写布局的人而言,刚开始对于声明式的组件布局真的是特别苦手,感觉就像在用iOS原生开发的思路写一个Flutter布局,有的时候真就是怎么写都写不好,直到活用了Padding和Margin,以及Expanded,也许你才会茅舍顿开.

SwiftUI和Flutter真的已经特别像了,SwiftUI中虽然没有stf和stl两个概念,却用了像@State这样的修饰符来修饰属性,只有有这种修饰符的属性才能进行变换.说到底,学习Flutter更多的也是拓宽思路,也能让我更好的去学习SwiftUI,再来后面如果在现有项目中集成Flutter也不会特别的苦手.

另外Future中其实面向协议编程已经有很大一部分了,只是Dart中没有接口,全部由虚基类来实现接口的功能,让人感觉它更”面向对象”.而Swift,特别是SwiftUI中,基本上就是面向协议编程的天下了,some View和Widget,真是太像了.

Dart中最蛋疼就是json转模型,真的是蛋疼到有的时候无力吐槽,所幸有各种工具网站一键转换,否则真的要手撕代码.而Swift中的Codable协议基本上让json转模型即写即用.

后续计划

1.页面的状态枚举与页面进行打通,并使其逻辑更加合理与完善.

2.使用flutter_bloc框架来进行MVVM模式改造.

推荐与感谢

推荐一个json转模型网站

Flutter组件介绍

推荐介绍Flutter组件的短视频集合

特别感谢:历时三天,完成了Flutter版本的玩安卓,我学习了里面很多代码,并进行了封装与抽取,没错,我就是一个搬运工.

项目地址

项目地址,记得给一个Star

编写Flutter版玩安卓App,以及一个iOS开发写Flutter的感受