Flutter技術(shù)調(diào)研及可行性結(jié)論

前言:

隨著Flutter的快速發(fā)展明肮,以及在國內(nèi)外應(yīng)用中作為跨平臺方案使用的普及菱农,F(xiàn)lutter吸引了無數(shù)開發(fā)者的眼光。我們也對Flutter從以下方向進行了技術(shù)方面的調(diào)研柿估,并在項目中進行了接入開發(fā)實戰(zhàn)循未,最終給出如下的可行性結(jié)論。

調(diào)研方向:

  • Flutter介紹
  • 跨平臺UI/API調(diào)用
  • 項目混編開發(fā)實踐
  • 測試調(diào)優(yōu)
  • 打包部署
  • 與原生體驗的比較
  • 熱更新
  • 第三方庫支持
  • 學(xué)習(xí)成本
  • 學(xué)習(xí)資源參考資料等

1秫舌、Flutter介紹

  • 快速開發(fā):Flutter 的熱重載可以快速地進行測試的妖、構(gòu)建UI、添加功能并更快地修復(fù)錯誤足陨。
  • 富有表現(xiàn)力嫂粟,漂亮的用戶界面:自帶的 Material Design 和 Cupertino(iOS風(fēng)格)widget、豐富的 motion API墨缘、平滑而自然的滑動效果星虹。
  • 響應(yīng)式框架:使用 Flutter 的現(xiàn)代、響應(yīng)式框架镊讼,和一系列基礎(chǔ) widget宽涌,輕松構(gòu)建您的用戶界面。
  • 訪問本地功能和 SDK:Flutter 可以復(fù)用現(xiàn)有的 Java狠毯、Swift 或 ObjC代碼护糖,訪問 iOS 和 Android 上的原生系統(tǒng)功能和系統(tǒng) SDK。
  • 統(tǒng)一的應(yīng)用開發(fā)體驗:Flutter 擁有豐富的工具和庫嚼松,可以幫助開發(fā)者從單個代碼庫為多個平臺構(gòu)建漂亮而快速的應(yīng)用程序嫡良,輕松地同時在 iOS 和 Android 系統(tǒng)中實現(xiàn)想法和創(chuàng)意。
  • 原生性能:Flutter 包含了許多核心的 widget献酗,如滾動寝受、導(dǎo)航、圖標(biāo)和字體等罕偎,這些都可以在 iOS 和 Android 上達到原生應(yīng)用一樣的性能很澄。

2、跨平臺程度颜及,UI/平臺對應(yīng)的API調(diào)用

組件UI:
  • 布局
  • 組件對比(Flutter 與 Android/iOS)
  • 新增/移除組件
  • 動畫
  • Draw Canvas
  • 自定義Widget
  • 點擊甩苛,手勢,觸摸
  • 主題文字樣式
  • 表單輸入
API調(diào)用:
  • 頁面切換/導(dǎo)航/回退棧
  • 線程俏站,異步
  • 網(wǎng)絡(luò)
  • 資源依賴讯蒲,圖片,多分辨率等
  • 字符串存儲肄扎,語言本地化
  • 生命周期
  • 訪問GPS 相機等原生功能
  • 數(shù)據(jù)庫墨林,本地存儲
  • 通知
遇到的問題及解決方案:
  • 問題:默認是MD風(fēng)格組件赁酝,對于iOS有Cupertino風(fēng)格的組件,兩者不統(tǒng)一旭等。解決方案: 設(shè)計統(tǒng)一風(fēng)格酌呆,個別樣式需要寫if else
  • 比如無法addSubView 只能寫if else
  • 比如沒有相對布局等
跨平臺相關(guān)總結(jié):

Flutter很好的提供了,頁面布局導(dǎo)航搔耕,動畫隙袁,手勢,交互度迂,網(wǎng)絡(luò)藤乙,線程,數(shù)據(jù)庫惭墓,生命周期管理坛梁,與原生平臺通信等跨平臺相關(guān),幾乎所有所需要功能的支持和實現(xiàn)腊凶。同時官方和社區(qū)提供的大量插件划咐,為跨平臺的功能開發(fā)和實現(xiàn)提供了很大的便捷。

3钧萍、與現(xiàn)有項目兼容度褐缠,可混合/兼容

主要內(nèi)容:
  • 目前國內(nèi)/國外 Flutter實踐現(xiàn)狀
  • 安裝/開發(fā)環(huán)境部署
  • 簡單講解一個Flutter頁面的結(jié)構(gòu)及實現(xiàn)方式
  • Flutter獨立開發(fā)/混編開發(fā)流程(平臺集成,插件開發(fā))
  • 簡單的混合開發(fā)示例接入Native风瘦,能夠和Native層有數(shù)據(jù)交互队魏。
  • 混合開發(fā)時角色定位
混編開發(fā):
  • 集成方式
  • 開發(fā)模式
  • 工程管理
  • 原生端與Dart端通信
  • 混合棧及路由
  • 調(diào)試
  • 穩(wěn)定性保證
遇到的問題及解決方案:
  • So庫兼容性問題
  • 包體大小問題
  • 資源共享問題
  • 混合棧及路由中的問題
  • Flutter模塊角色定位問題: 比如網(wǎng)絡(luò)請求,藍牙請求 該使用Native庫/ Flutter庫?
項目混合開發(fā)相關(guān)總結(jié):

Flutter完全支持項目的混合開發(fā)万搔,但在涉及到混合棧堆疊的時候胡桨,相關(guān)便捷性會降低(比如Native頁面-->Dart頁面-->Native頁面-->Dart頁面 )

4、測試調(diào)優(yōu)

  • Dart分析器:分析代碼并發(fā)現(xiàn)潛在錯誤
  • Dart Observatory (語句級的單步調(diào)試和分析器) : 使用語句級單步調(diào)試器連接到您的應(yīng)用程序
  • 調(diào)試模式斷言 : 使用 Flutter 的 “debug” 模式瞬雹,Dart assert 語句將被啟用昧谊。
  • 調(diào)試應(yīng)用程序?qū)樱篎lutter框架的每一層都提供了將其當(dāng)前狀態(tài)或事件 dump 到控制臺(使用 debugPrint)的功能。
  • 可視化調(diào)試:設(shè)置 [debugPaintSizeEnabled]為 true 來調(diào)試布局問題
  • 調(diào)試動畫:減慢動畫的速度來調(diào)試動畫調(diào)試
  • 調(diào)試性能問題
    • 測量 app 啟動時間
    • 跟蹤 Dart 代碼性能
    • PerformanceOverlay

......

  • 使用原生調(diào)試器調(diào)試代碼

......

Flutter提供了很多工具和特性酗捌,幫助調(diào)試Flutter應(yīng)用程序呢诬,保證開發(fā)者代碼的健壯性和應(yīng)用程序的性能表現(xiàn)。

5胖缤、打包部署

Flutter提供為Android 和 iOS平臺進行多渠道配置尚镰,發(fā)布,持續(xù)構(gòu)建和部署的方法哪廓。

6狗唉、與原生體驗的比較

  • Flutter在進行組件界面的渲染時,不需要經(jīng)過iOS平臺或者Android平臺撩独,而是直接通過自己的Skia渲染引擎繪制在畫布上敞曹,其渲染效率得到大幅提高,在使用體驗综膀,性能澳迫,流暢度等方面非常接近原生應(yīng)用。

7剧劝、熱更新

  • iOS不支持熱更新(Apple官方審核和限制)
  • Android的熱更新已列入官方2019的產(chǎn)品規(guī)劃橄登,未來會支持,但現(xiàn)在還不支持

8讥此、第三方庫支持

網(wǎng)絡(luò)庫Http Dio
數(shù)據(jù)庫Sqlite , SharePreference

圖片庫Cached network image
DeviceInfo
Firebase
WebView通信
Webview Plugin
Image_Picker
Date_Picker
Url_launcher
電池
相機
......

在官方插件庫Pub上提供了官方和開發(fā)者開發(fā)的大量插件拢锹,以滿足開發(fā)者的日常開發(fā)需要。目前已有大量開發(fā)者在使用這些插件萄喳,開發(fā)者也可以自己開發(fā)相關(guān)插件并上傳供其他人使用卒稳。

9、學(xué)習(xí)成本他巨,(開發(fā)/部署)

  • Dart語言
  • Flutter相關(guān)組件充坑,布局...
Dart的語法個人覺得比較簡單,很像是Java+Kotlin的結(jié)合體染突。但是Flutter本著萬物皆為Widget的原則捻爷,提供了接近30多種不同的布局widget,日常中用的也有如Container份企、Padding也榄、Center、Align司志、Row甜紫、Column、Stack俐芯、ListView等上十種棵介,在布局方面的學(xué)習(xí)曲線較長,學(xué)習(xí)成本較高吧史。

10邮辽、學(xué)習(xí)資源,參考資料等

官方文檔:https://flutter.cn
Widget目錄:https://flutter.cn/docs/reference/widgets
API文檔:https://docs.flutter.cn/
插件庫Packages:https://pub.flutter-io.cn/flutter
官方維護Plugins : https://github.com/flutter/plugins
Flutter Wiki: https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps
iOS風(fēng)格組件:https://flutter.cn/docs/development/ui/widgets/cupertino
Samples : https://github.com/flutter/samples/blob/master/INDEX.md
各App Flutter實踐總結(jié)...

11贸营、Flutter在國內(nèi)的應(yīng)用及相關(guān)開發(fā)實踐總結(jié):

閑魚:https://www.zhihu.com/org/xian-yu-ji-zhu/posts?page=1
今日頭條:https://mp.weixin.qq.com/s/-vyU1JQzdGLUmLGHRImIvg
美團:https://tech.meituan.com/2018/08/09/waimai-flutter-practice.html
網(wǎng)易新聞:https://mp.weixin.qq.com/s/a0in4DqB8Bay046knkRr1g
愛奇藝: https://mp.weixin.qq.com/s/f4j3_NGxjAjqNmecc5XrjA
餓了么:https://juejin.im/post/5b8d46c3e51d4538e710bc78
京東吨述,高德,Now直播等...

12钞脂、Flutter開發(fā)角色定位:

  • 適合開發(fā)獨立項目(純Flutter項目)
  • 適合純互聯(lián)網(wǎng)App開發(fā) (不需過多依賴平臺/硬件)
  • Flutter不適合混合棧堆疊過多的情況(Native-->Dart-->Native-->Dart)
  • Flutter不適合平臺/硬件強相關(guān)的功能開發(fā)揣云。在這種情況下,F(xiàn)lutter只適合做頁面冰啃,使用Native端的數(shù)據(jù)進行渲染展示邓夕。
  • 在混合項目開發(fā)時刘莹,F(xiàn)lutter定位接近H5 , 但是比H5適用范圍更廣,性能表現(xiàn)和用戶體驗更好焚刚。

13点弯、Flutter槽點(只列舉個人覺得最影響的):

  • Flutter提供接近30多種不同的布局widget,日常中用的也有如Container矿咕、Padding抢肛、Center、Align碳柱、Row捡絮、Column、Stack莲镣、ListView等上十種福稳,在布局方面的學(xué)習(xí)曲線較長,學(xué)習(xí)成本較高瑞侮。
  • Flutter使用代碼方式寫布局灵寺。對于Android開發(fā)者來說,可能會難以接受和適應(yīng)区岗,在代碼類中多了幾百行布局代碼的情況
  • 目前覺得最困擾的地方在于:使用Flutter進行混合項目開發(fā)時略板,之前原生實現(xiàn)的通用業(yè)務(wù)基礎(chǔ)庫(網(wǎng)絡(luò)庫適配,數(shù)據(jù)庫慈缔,圖片庫)叮称,通用組件和UI基礎(chǔ)庫(這個是最耗時的)等,都需要再實現(xiàn)一遍藐鹤,這和使用Flutter提高開發(fā)效率的目標(biāo)相違背瓤檐。

14、可行性結(jié)論 (得分越高越好娱节,滿分為5分):

跨平臺支持(UI組件/API) 項目兼容度 學(xué)習(xí)成本 與原生體驗的比較 熱更新 第三方庫支持 市場應(yīng)用情況
分數(shù) 4.5 4 3 5 1 4 4

結(jié)合上述的調(diào)研和分析挠蛉,使用Flutter進行項目的開發(fā)是完全可行的,而且也是比較有發(fā)展前景的肄满。不過如何確定Flutter和Native端開發(fā)的邊界谴古,會是一個非常重要且需要慎重思考的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稠歉,一起剝皮案震驚了整個濱河市掰担,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怒炸,老刑警劉巖带饱,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阅羹,居然都是意外死亡勺疼,警方通過查閱死者的電腦和手機教寂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來执庐,“玉大人孝宗,你說我怎么就攤上這事「纾” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵问潭,是天一觀的道長猿诸。 經(jīng)常有香客問我,道長狡忙,這世上最難降的妖魔是什么梳虽? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮灾茁,結(jié)果婚禮上窜觉,老公的妹妹穿的比我還像新娘。我一直安慰自己北专,他們只是感情好禀挫,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拓颓,像睡著了一般语婴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驶睦,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天砰左,我揣著相機與錄音,去河邊找鬼场航。 笑死缠导,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溉痢。 我是一名探鬼主播僻造,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼孩饼!你這毒婦竟也來了嫡意?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捣辆,失蹤者是張志新(化名)和其女友劉穎蔬螟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汽畴,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡旧巾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年耸序,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲁猩。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡坎怪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出廓握,到底是詐尸還是另有隱情搅窿,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布隙券,位于F島的核電站男应,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏娱仔。R本人自食惡果不足惜沐飘,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牲迫。 院中可真熱鬧耐朴,春花似錦、人聲如沸盹憎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陪每。三九已至蜒滩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奶稠,已是汗流浹背俯艰。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锌订,地道東北人竹握。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像辆飘,于是被迫代替她去往敵國和親啦辐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容