很多人都在追捧flutter dart移动ui框架,但是这里我想说一下它的不足,大家一起说说它的缺点?
目前遇到最大的问题来自dart语言本身
尤其是dart的switch,没有switch增强的dart在很多时候会让代码写得很难看
我们举两个例子
1)dart目前没有箭头case,which java将在14中正式release
比如我们可以这样
int j = switch(i){
case 1 -&> 3;
case 2 -&> 81;
default -&> 29;
}
dart就不行,只能依次break,跟旧版的java一样
2)dart目前没有pattern matching,哪怕是最简单的is/instanceof这种都没有,which java将会在14中开始添加该语法,kotlin中已经有了
比如我们可以这样,这次用kotlin代码
when(e){
is PointerDownEvent -&> {...}
is PointerUpEvent -&> {...}
is PointerMoveEvent -&> {...}
else -&> {...}
}
但是呢,dart没有,所以只能
if(e is PointerDownEvent){...}
else if(e is PointerUpEevent){...}
else if(e is PointerMoveEvent){...}
else {...}
然后这些都会算作一行,一旦在ide里面cllapse的话,会变成一行,很难看
目前没有听说dart有打算改进这些语法的意思
还有就是flutter有比较重的j2ee的痕迹,stateful/stateless的组件的区分,我只在ejb里面见过
另外最近flutter team似乎有些头脑发热,survey里面居然问要不要弄di,我坚决滴投了反对票
guice的di做倒是做出来了,但是安卓开发有人用这玩意吗?
纯粹搞笑来的,因为介入太深,导致很多东西没有javafx那么容易修改,javafx虽然也有很多糟粕,但是我们可以取其精华,弃其糟粕,但是相比之下,flutter的自由度就没那么大,Google包办了很多事,虽然貌似傻瓜化了,但是如果你不太认同它的理念的话,或者不太理解的话,会有点坑,比如stateful widget
估计将来一段时间内,还是会有一些breaking changes出现
还有就是,一些API的设计,比如draw text,这本来很简单的一个api,硬是给搞得那么复杂
还有自定义按钮等,在javafx里面都是非常简单的操作,到了flutter这边,我要写几十行代码
有些用属性可以做得很简单的,要用一个container套一层,增加了一层缩进
虽然写出来了也就那样,但是我还是希望这种东西能够由框架来完成
而不是由程序员去吭哧吭哧写
都是些太过于常用的功能了
给我的感觉主要有两点吧
- ui的代码和逻辑代码混在一起,结构划分不清晰,维护成本变高
- ui状态管理复杂,不容易控制,开发成本变高
其他都还好,毕竟比较新需要给它点时间来完善。
哈哈,写了一个小框架解决上述问题
https://pub.dev/packages/mvvm
技术选型就是在做取舍,必然没有完美的方案。
在之前我 iOS 和 Android 版本都是原生方案。好处是所有问题基本上都有了最佳实践,也可以做针对性的优化。
但问题就是需要写两遍,虽然 Swift 和 Kotlin 已经几乎是无缝转换(思维上)但是 UI 交互细节处理起来很耗费精力和耐心。
Flutter 一次构建,在不依赖于平台特性的情况下,无缝运行。
但是如果要依赖平台特性,Flutter 没有很多可供参考的案例,性能也会有比较大的损耗。外加 Dart 比起来很现代化的 Swift 在 enum switch 这些基本元素上都非常弱。extension 的实现也不如 Swift 优雅。
但是,Flutter 还是可以很好的解决一些我不想重复实现的业务逻辑问题。
dart语言真的不够强大!比如:
1.不支持反射,导致无法在运行时改变类的行为,具体表现,在项目中,很难写一些开源架构性的工具,比如dart版本的retrofit,注解+反射很难实现。
2.dart的注解处理器太弱的!和java相比,dart的注解处理器真的太不值一提。
3.dart自定义enmu太弱了,用过都知道。
4.开发工具的支持力度和java,kotlin比较,它简直了,很多代码模板都用不了,提示也不强大,效率太低。
5.第三库太少了吧,由于项目是im,很多加密和第三方都用原生写的,pub上的lib太少了,而且质量太差!真的不高。
目前使用dart做im的中间层,所以还没有接触到ui,已经遇到很多不好的特性和语法以及工具链的不足,当然它也有其它好处,这次只是说它的不足。
我觉得最大的问题就是很多功能需要集成第三方 SDK,但是 SDK 只有安卓和 iOS 版,这样就需要去pub.dev 找个封装好的插件来用,但是试过几个后,质量良莠不齐,可能还得自己封装一下,自己封装如果只封装需要的功能,倒是也快,但是你需要懂一点原生,而且,可能是四种语言,Java,Kotlin,Objective-C,Swift。加上Dart,开发个 App,一共需要五门语言(还不算Javascript)。
优点
声明式写法,ui逻辑,数据逻辑完全区分开来
组件丰富,可以完全不使用android ios组件。自定义自己喜欢的组件。
缺点
学习成本高,flutter采用Dart开发,而Dart又是Java与JS结合体,面向对象基于Java,而函数编程基于JS。
Flutter又是跨平台框架,需要学习android,ios,web。
个人观点
Flutter好在于新的编程思维。
以下缺点为优点背后的小缺点。
更新太快,版本不停跟著更新,但是都还好,不算太麻烦。
生态圈处在稳定过程中,有些插件很不错,但是更新很不持续。
dart这个语言设计的很一般,不如kotlin好
声称性能很好,其实只是比typescript好,跟nodejs没有本质区别
目前没有很好的序列化/反序列化方案
导航栏和滚动视图是真的难用
- Dart 有点弱;
- 还不支持热更新,这就导致对热更新期待很高的公司很难放弃RN等转到 flutter;
- 生态还不是很完善,很多公司都是还在观望;
- 和原生开发的结合还是不要顺畅,官方对于 native + flutter 的混合开发的方案支持还不完善。毕竟现有这个大的项目,不可能重新写啊。。。
推荐阅读: