flutter與swiftUI簡介與對比

本文簡單介紹一下flutter簡介與swiftUI對比

1、flutter簡介

	隨機各種技術的不斷髮展成熟,5G,雲計算,區塊鏈等等,應把更多的精力放在數據運算,數據處理上。各大公司考慮跨平臺技術的解決方案,React Native和Weex等等,每種框架都有各自的優缺點,但目標都是一致的,就是提升應用的開發效率,降低研發成本,一套代碼運行多個平臺。
	
	Flutter是Google在2015年推出的移動UI框架,可快速在iOS和Android上構建高質量的原生用戶界面。Flutter第一次亮相於2015年5月Dart開發者峯會上,初始名字叫做“Sky”,後更名爲Flutter,Flutter使用Dart語言開發,Dart是Google於2011年推出的新的計算機編程語言。
Flutter 具有快速開發的特點,Flutter選用了Dart作爲其開發語言,Dart既可以是AOT(Ahead Of Time)編譯,也可以是JIT(Just In Time)編譯,其JIT編譯的特性使Flutter在開發階段可以達到亞秒級有狀態熱重載,從而大大提升了開發效率。

1.1 Flutter 用Dart作爲開發框架和widget的語言,

使用自帶的高性能渲染引擎(Skia)進行自繪,渲染速度和用戶體驗堪比原生。
Skia是什麼?
Skia是一個2D的繪圖引擎庫,其前身是一個向量繪圖軟件,Chrome和 Android均採用 Skia作爲繪圖引擎。Skia提供了非常友好的 API,並且在圖形轉換、文字渲染、位圖渲染方面都提供了友好、高效的表現。Skia是跨平臺的,所以可以被嵌入到 Flutter的 iOS SDK中,而不用去研究 iOS閉源的 Core Graphics / Core Animation。

1.2 Flutter內置衆多精美的Material Design和Cupertino(iOS風格)小部件,開發者可快速構建精美的用戶界面,以提供更好的用戶體驗。

1.3 Flutter熱重載

“熱重載” Hot Reload 通過將更新的源代碼文件注入正在運行的Dart VM(虛擬機)中工作。這不僅包括添加新類,還包括向現有類添加方法和字段,以及更改現有函數。儘管有幾種類型的代碼更改無法熱重新:
全局變量初始化器。
靜態字段初始化程序。
main()應用程序的方法。
簡析熱重載:

  • dart語言可以同時支持JIT/AOT編譯的語言
  • JIT(just in time)即時編譯技術 (動態編譯)
  • JIT編譯器將字節碼編譯成本機機器代碼,具體參考深入淺出 JIT 編譯器
  • flutter debug模式下使用的是JIT 編譯,將更新的源代碼文件注入正在運行的Dart VM中,從而運行的時候實時刷新最新代碼
  • AOT (Ahead Of Time) 運行前編譯(靜態編譯),具體參考AOT編譯器
  • flutter 打包時使用的是AOT編譯,運行之前將代碼編譯爲本機機器語言

1.4【架構模式】

在這裏插入圖片描述Flutter 官方給出的系統框架圖,可以看書flutter框架分爲三層,Framework層、Engine層和Embedder層。

Framework層:由Dart來實現,包含衆多安卓Material風格和iOS Cupertino風格的Widgets小部件,還有渲染、動畫、繪圖和手勢等。Framework包含日常開發所需要的大量API,普通應用開發熟悉這些API的使用基本OK了,不過很多特殊場景的控件需要自己根據實際情況進行自定義。
Framework層的源碼地址:https://github.com/flutter/flutter/tree/master/packages/flutter/lib
Engine層:由C/C++實現,是Flutter的核心引擎,主要包括Skia圖形引擎、Dart運行時環境Dart VM、Text文本渲染引擎等;如果想深入瞭解Flutter原理,建議閱讀該層的源代碼。源代碼地址:https://github.com/flutter/engine
Embedder層:主要處理一些平臺相關的操作,如渲染Surface設置、本地插件、打包、線程設置等。

1.5 運行原理

無論是iOS還是安卓都是提供了一個平臺的View給Flutter層,頁面內容渲染交由Flutter層自身來完成。所以其相對React Native等框架性能更好。Flutter中圖形渲染流程:
在這裏插入圖片描述大致流程如下:

  1. GPU的Vsync信號同步到UI線程
  2. UI線程使用Dart來構建抽象的視圖結構
  3. 視圖結構在GPU線程中進行圖層合成
  4. 合成後的視圖數據提供給Skia圖形引擎處理成GPU數據
  5. 數據再通過OpenGL或Vulkan提供給GPU進行渲染

2 flutter與swiftUI,聲明式UI

2.1 SwiftUI

蘋果WWDC 19發佈了SwiftUI。一個declarative UI框架用於構建iOS, iPadOS, macOS, watchOS, tvOS下的“跨”蘋果平臺的應用,理論上SwiftUI的一套declarative UI代碼可以在這些平臺上運行。

2.2 命令式UI與聲明式UI

對於iOS傳統開發來講,UI和業務分解不好的UIViewController代碼很臃腫。大部分代碼是在處理數據變化引起的UI變化和用戶的交互等。
比如,處理登錄按鈕;顯示一個表示處理中的轉圈動畫;調用後端;隱藏轉圈動畫;重定向到主屏幕;失敗時顯示彈出窗口。在這種“命令式”範例中,你可以直接更改 UI 的各個部分以響應各種事件。看起來很簡單,但隨着應用程序變得越來越複雜,開發者很難掌握各種事件之間的具體關係,更新 UI 時很容易就會造成意外的故障。
而聲明式UI可以解決這個問題,UI分離出來,更加專注的處理邏輯與數據。

相比之下,在”聲明式“的範例中用戶界面被”聲明“爲表示它的一些數據函數。這些數據被稱爲狀態State。隨着這些狀態變化,UI會自動更新。上面的例子來說:如果用戶還沒有登錄,那就顯示登錄界面,如果用戶已經登錄就顯示用戶主頁。如果網絡繁忙則顯示旋轉等待動畫;如果失敗則顯示錯誤。與命令式方法的不同之處在於,所有不同的狀態都在一個地方統一處理,這樣就能防止意外或不一致的結果。

Flutter 使人們可以使用與 SwiftUI 相同的聲明式 UI 技術,並且開發的代碼可以在更多的平臺上運行,這些平臺包括 Android、Windows、Web 和 IOT 等​。
當然在語法上Flutter確實沒有SwiftUI簡潔,類似”俄羅斯套娃“的child/children以及看了就煩的茫茫多的括號確實讓開發者很難清晰的看出其結構。
但是覺得跨平臺UI、聲明式UI可以節省更多的資本,不斷試錯,不斷去處理數據去分析數據而不是把重點放在如何畫UI上也是一種趨勢。

3flutter開發工具

可以 Android Studio、IntelliJ或VS Code
如何配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章