「就像你問我怎麼才能造坦克,我就必須把從冶金到化工整個現代化工業體系給你講一遍。」——tombkeeper編程
Flutter是什麼?安全
Flutter是一款移動應用程序SDK,一份代碼能夠同時生成IOS和Android兩個高性能、高保真的應用程序。數據結構
Flutter目標是使開發人員可以交付在不一樣平臺上都感受天然流暢的高性能應用程序。兼容滾動行爲、排版、圖標等方面的差別。併發
應用程序使用Dart語言編寫的,若是使用過Java或JavaScript之類的語言,則該應用程序看起來會很熟悉。框架
爲何要用Flutter?less
提升開發效率異步
建立美觀,高度定製的用戶體驗ide
Flutter和React-Native、Weex這樣的動態化框架有什麼不一樣?函數式編程
React-Native、Weex核心是經過Javascript開發,執行時須要Javascript解釋器,UI是經過原生控件渲染。Flutter與用於構建移動應用程序的其它大多數框架不一樣,由於Flutter既不使用WebView,也不使用操做系統的原生控件。 相反,Flutter使用本身的高性能渲染引擎來繪製widget。Flutter使用C、C ++、Dart和Skia(2D渲染引擎)構建。在IOS上,Flutter引擎的C/C ++代碼使用LLVM編譯,任何Dart代碼都是AOT編譯爲本地代碼的,Flutter應用程序使用本機指令集運行(不涉及解釋器)。而在Android下,Flutter引擎的C/C ++代碼是用Android的NDK編譯的,任何Dart代碼都是AOT編譯成本地代碼的,Flutter應用程序依然使用本機指令集運行(不涉及解釋器)。所以,Flutter能達到原生應用同樣的性能。函數
同時,Flutter提供了一組本身的widget),由Flutter的framework和引擎管理和渲染。您能夠瀏覽Flutter widget的目錄。之因此不適用原生控件,是由於Flutter但願最終結果是更高質量的,若是Flutter使用原生系統widget,Flutter應用的質量和性能將受到這些widget自己質量的限制。例如,在Android中,有一組硬編碼的手勢和固定的規則來對它們進行手勢衝突消歧。在Flutter中,您能夠編寫本身的手勢識別器,該手勢識別器是手勢系統中的一級參與者 。此外,由不一樣人撰寫的兩個小工具可協調手勢衝突消歧。
Flutter在四個主要維度進行了評估,並考慮了框架做者、開發人員和最終用戶的需求等因素。咱們發現不一樣的語言在不一樣的層面符合一部分需求,但Dart在全部評估維度上得分都很高,而且符合咱們的全部要求和標準。
Dart運行時和編譯器支持Flutter的兩個關鍵特性的組合:基於JIT的快速開發週期:容許使用類型的語言進行形狀更改和有狀態的熱重載;以及AOT編譯器,可生成高效的ARM代碼,能夠快速啓動並擁有可預測的生產部署性能。
此外,咱們有機會與Dart社區密切合做,Dart社區正在積極投入資源改進Dart在Flutter中的使用。例如,當咱們採用Dart時,該語言沒有提供生成原生二進制文件的工具鏈(這對於實現可預測的高性能是頗有幫助的),可是如今實現了,由於Dart團隊爲Flutter構建了它。一樣,Dart VM以前已經針對吞吐量進行了優化,但團隊如今正在優化VM的延遲時間,這對於Flutter的工做負載更爲重要。
Dart在如下主要標準上獲得高分:
Flutter是一個多範式編程環境。在Flutter中使用了過去幾十年中開發的許多編程技術。咱們使用的每個範式都是咱們相信該它的優點特別適合Flutter:
組合:Flutter使用的主要範例是使用小對象,而後將它們組合在一塊兒以得到更復雜的對象。Flutter widget庫中的大多數widget都是以這種方式構建的。例如,Material FlatButton 類是使用MaterialButton 類構建, 該類自己使用IconTheme、InkWell、Padding、Center、Material、AnimatedDefaultTextStyle和ConstrainedBox組合 構建。該InkWell 使用內置GestureDetector。Material 是使用內置AnimatedDefaultTextStyle、NotificationListener和AnimatedPhysicalModel。等等,它們都是widget。
Flutter和別的開發之間的關係?
「
以前有很多朋友,在公衆號裏問我,是學習Flutter開發仍是學習安卓開發?這個問題在我看來其實並不完整,由於一樣你還能夠問是學習Flutter開發仍是iOS開發?是學習Flutter開發仍是學習Web開發?
經過此次Developer Keynote咱們能夠看出,Flutter是一種跨平臺技術,而不屬於Android技術,Goole的Android團隊對於Flutter隻字未提,而是建議使用Kotlin語言來進行開發。那麼Google爲何還要開發Flutter技術呢?由於跨平臺開發市場即便Google不作也會有其餘公司去作,好比FaceBook的RN,阿里的Weex。所以Flutter其實是在和這些公司的產品搶市場,而不是在和本身的Android團隊搶市場。
因此這種問題其實沒有什麼標準的答案,你喜歡哪一個技術就能夠去學哪一個技術,Flutter和Adroid並非那種二選一的關係,而是一種共生的關係。Flutter團隊會繼續完善這個跨平臺開發的框架,Android團隊也會繼續發展本身的原生開發環境,他們都有着各自的優點,相信將來都會變得更加美好。
」
——郭霖《一篇文章帶你看遍Google I/O 2019大會》
Flutter中文網:https://flutterchina.club/technical-overview/
Flutter-FAQ:https://flutterchina.club/faq/