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