目前遇到最大的问题来自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套一层,增加了一层缩进

虽然写出来了也就那样,但是我还是希望这种东西能够由框架来完成

而不是由程序员去吭哧吭哧写

都是些太过于常用的功能了


给我的感觉主要有两点吧

  1. ui的代码和逻辑代码混在一起,结构划分不清晰,维护成本变高
  2. 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没有本质区别

目前没有很好的序列化/反序列化方案


导航栏和滚动视图是真的难用


  1. Dart 有点弱;
  2. 还不支持热更新,这就导致对热更新期待很高的公司很难放弃RN等转到 flutter;
  3. 生态还不是很完善,很多公司都是还在观望;
  4. 和原生开发的结合还是不要顺畅,官方对于 native + flutter 的混合开发的方案支持还不完善。毕竟现有这个大的项目,不可能重新写啊。。。


推荐阅读:
相关文章