發表日期:2018-12 文章編輯:小燈 瀏覽次數:4517
Flutter前段時間終于出了1.0,是時候親手實踐一把了。
實踐之前先了解一下前人的智慧,發現一篇文章:
我花了 8 小時,"掌握"了一下 Flutter | Flutter 中文站上線
https://www.jianshu.com/p/9aaabc60d8af
這文章比較有意思,可能就是Flutter 中文站的人寫的,非常有用,當然文章里的寫的8小時我感覺快了點兒,搗鼓一遍肯定不夠的,搞不好install都要好久。下載完flutter sdk和plugin之后要flutter doctor -v檢查開發環境,結論一般都是:Doctor found issues in X categories,會給出相應的tip,一個一個照做就行了,實踐發現這些issues不需要全部處理,例只做android的話,ios的 toolchain可以忽略,“Android license status unknown”的提示特別愁人,不過stackoverflow都有解決方法,我一開始兢兢業業地照做了,第二天手殘更新了一下android studio,結果“Android license status unknown”的提示又出來了,不過我發現編譯打包都沒問題,就不管了。
Flutter和javascript、react有點像,沒有handler了,不需要自己切換線程;Flutter加載圖片使用的是graphic memory,不用擔心oom的問題,這些優點都挺省心的。Dart和swift語法也特別像,我開玩笑說,不管誰看到Dart都會覺得和某種語言有點像。。面向對象與響應式編程相結合的語言基本都長這樣了。
純java程序員剛上手可Flutter能會不太適應。Dart的嵌套真不是一般的深,更搞笑的是Flutter插件會幫我們在嵌套的一個個括號后面添加注釋:
這個注釋與前面的new配對的,刪不掉也無法選中,顯然Google也擔心我們代碼層級太多,看不下去了。不知道這種注釋能不能自定義,不美觀。
Flutter里一切都是Widget,以前看到這個描述沒啥感覺。寫一遍代碼就特別容易理解了,果然一切都是,布局、控件就不用說了,連實現padding、margin、居中這些屬性都是由一個個Widget來實現的。這么做的好處是邏輯簡單,學習上手快,一個概念理解了就能吃遍天,Flutter繪制界面也方便,只需要一次深搜就可以算出控件的位置了;壞處是顯然易見的,看上面的層級,我這個是少的,大家開發時看看Flutter Outline里面的Widget樹吧,一不小心能嵌套十幾層。。我們實際開發時一定要想辦法減少Widget層級,比如多提取方法,自己封裝widget等。Android自定義View多用繼承,Flutter自定義Widget是通過組合多個Widget來實現的。Flutter官方已經提供了許多Widget了,但我估計不久以后,Flutter的各種開發庫會爆發式增長,浩如煙海,各公司甚至各項目組都會定義各自的UI庫,研發管理需要注意。
Flutter開發不需要寫android的layout了,全部通過代碼實現,這意味著業務代碼很容易與UI代碼混成一坨,Flutter官方說選Dart的原因之一就是在代碼規模變大后依然能保持可讀性,我對這話不是很理解,可能我沒有好好看Dart文檔吧。如何把代碼寫得清晰可讀還是值得推敲一下的,我覺得項目組轉型Flutter之前一要先定好代碼風格,千萬不能隨便發揮。
轉型Flutter還有個要注意的地方,與原生Android不同,Flutter不可以隨意增刪控件,Flutter界面是逐幀繪制。Flutter非常重視Widget的狀態,如果界面是動態變換的,那么Widget在定義的時候就要知道自己有哪些狀態。官方給了個網絡請求的例子,發起網絡請求之前彈出progress,請求結束后關閉progress顯示列表,很簡單的功能,官方給的方案是通過全局變量來判斷界面狀態,如果當前正在請求網絡,那么new progessDialog,http請求結束置全局變量,然后setState重繪界面,new ListView:
這種實現方式真是讓人不舒服,我覺得會破壞代碼結構,你想假如原來沒有顯示progress,只做了列表,這個時候測試提個bug說http請求時間太長,一定要加progress,這個時候再改代碼真是要改得懷疑人生了。所以一定要做好封裝,減少耦合,官法沒有提供優雅的實現,那么我們得自己定義一個通用的Widget來切換控件的隱藏和顯示。就這么一個簡單的功能,想寫好都要費一下勁,所以說,開發Flutter項目也不見得有多輕松,一大堆公用Widget等著去實現呢。
1.0正式版出來了,基于Flutter全新開發android app應該問題不大了。但是很多愿意轉型的項目應該更希望能把Flutter嵌入到原生項目里,官方github已經有example了,clone下來跑起來看了還蠻震驚的,用FlutterView把flutter嵌到android原生界面里,做到了flutter與原生android互交互,渾然天成,簡直太完美了!把Flutter添加到原生android流程不復雜,先建個Flutter module,再引入即可。于是忍不住往自己的項目里加,結果發現處處是大坑。首先,要知道絕大多數android項目只要有點規模,依賴包就已經很多了,build.gradle里面有各種配置,完整clean build一遍一分鐘內能完成就不錯了,這下要再implementation一個flutter,唉真是慢,誰用誰知道。我以前做swift開發吐槽xcode升級前后不兼容,其實android studio也是半斤八兩,我昨天手殘android studio從3.1.3升級到3.2.1,結果Flutter工程就真的認不出來了,非得升級一下Flutter plugin才好使了。另外,Android、Flutter混合開發最最麻煩的事是,嵌到android界面里的flutter不可以與android一起debug,開發的時候要開兩個android studio,各自調各自的,于是果斷放手。總得來說,老項目要轉型Flutter還是整體重構比較靠譜。
日期:2018-10 瀏覽次數:7247
日期:2018-12 瀏覽次數:4319
日期:2018-07 瀏覽次數:4868
日期:2018-12 瀏覽次數:4168
日期:2018-09 瀏覽次數:5491
日期:2018-12 瀏覽次數:9915
日期:2018-11 瀏覽次數:4798
日期:2018-07 瀏覽次數:4574
日期:2018-05 瀏覽次數:4851
日期:2018-12 瀏覽次數:4315
日期:2018-10 瀏覽次數:5132
日期:2018-12 瀏覽次數:6206
日期:2018-11 瀏覽次數:4453
日期:2018-08 瀏覽次數:4585
日期:2018-11 瀏覽次數:12623
日期:2018-09 瀏覽次數:5570
日期:2018-12 瀏覽次數:4823
日期:2018-10 瀏覽次數:4178
日期:2018-11 瀏覽次數:4522
日期:2018-12 瀏覽次數:6057
日期:2018-06 瀏覽次數:4002
日期:2018-08 瀏覽次數:5427
日期:2018-10 瀏覽次數:4453
日期:2018-12 瀏覽次數:4516
日期:2018-07 瀏覽次數:4355
日期:2018-12 瀏覽次數:4494
日期:2018-06 瀏覽次數:4376
日期:2018-11 瀏覽次數:4369
日期:2018-12 瀏覽次數:4242
日期:2018-12 瀏覽次數:5275
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.