likes
comments
collection
share

Flutter:枚举的缺点

作者站长头像
站长
· 阅读数 71

学习Flutter也有七八月时间了,从最初边看他人的Demo边CV战士学习,到写玩安卓的Demo,再到尝试将公司的项目使用Flutter化,或多或少有一些心得体会,我争取在闲余时间记录下来,大家一看笑之。

聊到Flutter,我们经常会聊它是什么,也经常会搬出下面这张图:

Flutter:枚举的缺点

通过状态更新UI,这就是Flutter在更新UI时的本质,无论是使用setState,抑或使用框架,我们绕不开的是状态。

状态是什么?我认为状态其实就是枚举,你的界面有多少种状态,你其实就应该使用枚举状态去接收它。

我们先讨论这样一个场景,进入一个页面需要做网络请求,会有加载(菊花转,网络请求)、请求成功(成功有内容的展示页面或者没有内空白页面),请求失败(失败页面)。

Flutter:枚举的缺点

按照上图,在Swift中我会如下编写枚举

enum ResponseState {
    case loading
    case success(ResponseStateSuccess)
    case error
    
    enum ResponseStateSuccess {
        case hasContent
        case empty
    }
}

Kotlin不用多说,Swift有的,它都有,枚举中传参也是家常便饭,枚举编写的方式几乎和Swift一模一样。

而在Dart下,我只能这么写

enum ResponseState { 
  loading,
  successAndHasContent, 
  successAndEmpty, 
  error 
}

哪种编写方式更科学,更符合思维逻辑,不言而喻。

Flutter将Dart作为编程语言,考虑的是JIT与AOT齐飞的优势,不过Flutter是响应式的状态绘制UI的框架,其枚举的羸弱,让Swift与Kotlin的惯用者只能叹息一声。

缺少枚举带参,看起来在开发中没啥太大问题,我们可以通过工具类Utils或者枚举分类(幸好Dart的枚举还能扩展方法)去一定程度的缓解。不过回想一下还是让人有点心里痒痒,在我灵活运用状态去更新页面的时候,Dart的枚举却在绊脚。

至于Swift与Kotlin的枚举,都更加符合现代编程。Swift支持带参,遵守协议,与值类型的继承等。

也不能全怪Dart,毕竟它推出的时候才2011年。

目前Flutter团队正在为Dart添加Null Safe的功能,其实这个就是Swift中的可选类型,Kotlin也有对应的思路,就我个人经验而言,一旦了解的可选类型的机制,会让因为null导致的问题降低很多,并且代码更为严谨。目前Dart在为此做努力,也是好事。

希望啥时候也将枚举的功能增强一下吧。

转载自:https://juejin.cn/post/6908628153241960455
评论
请登录