目前遇到最大的問題來自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 的混合開發的方案支持還不完善。畢竟現有這個大的項目,不可能重新寫啊。。。


推薦閱讀:
相关文章