Flutter - 1.簡介

Flutter 是 Google 開源的跨平臺移動開發框架。 用一套代碼爲 iOS 和 Android 構建高性能,美觀的應用程序。它也是 Google 即將推出的 Fuchsia 操做系統的開發平臺。此外,它的架構能夠經過定製的 Flutter 引擎將其引入其餘平臺。web

Flutter 特色

Flutter 試圖使移動開發更友好, 它爲開發人員提供應用程序框架和可移植的運行時引擎。該框架創建在 Skia 圖形庫上,提供實際呈現的部件,而不只僅是原生控件的包裝。後端

Flutter 作跨平臺開發可以像 web 同樣靈活,但同時提供流暢的性能。Flutter 附帶的部件庫以及開源部件使其成爲一個功能豐富的平臺。簡單地說,Flutter 是最接近移動開發人員用於跨平臺開發的理想平臺,靈活性、性能幾乎毫無妥協。架構

Dart

Flutter 使用谷歌開發的 Dart 語言進行開發。 Google給出了選擇Dart開發Flutter的理由:框架

  1. Dart運行時和編譯器支持Flutter的兩個關鍵特性的組合:
  • 基於JIT的快速開發週期:容許使用類型的語言進行形狀更改和有狀態的熱重載;
  • 以及AOT編譯器,可生成高效的ARM代碼,能夠快速啓動並擁有可預測的生產部署性能。
  1. 開發人員的效率。Flutter的主要價值主張之一是經過讓開發人員使用相同的代碼庫爲iOS和Android建立應用程序,從而節省了工程資源。使用高效的語言能夠進一步加速開發週期,並使Flutter更具吸引力。這對咱們的framework團隊和開發人員都很是重要。大部分Flutter功能都是用Dart實現,所以咱們須要在10萬行代碼時能保持高效的而不會犧牲framework和widget的可讀性。
  2. 面向對象。雖然咱們可使用非面向對象的語言,但這意味着要從新解決幾個難題。另外,絕大多數開發人員都具備面向對象開發的經驗,所以更容易學習如何使用Flutter進行開發。
  3. 可預測,高性能。藉助Flutter,咱們但願使開發人員可以快速建立流暢的用戶體驗。爲了實現這一點,咱們須要可以在每一個動畫幀中運行大量的代碼。這意味着咱們須要一種既能提供高性能又能提供可預測性能的語言,而不會出現會致使丟幀的週期性暫停。
  4. 快速內存分配。Flutter框架使用函數式流,它很大程度上依賴於底層的內存分配器,從而有效地處理小的、短時間的內存分配會很是重要,因此在缺少此功能的語言中Flutter沒法有效地工做。

Flutter 時間表

  • 2015 年 4 月,Flutter(最初代號 Sky)在 Dart Developer Summit 上展現
  • 2015 年 11 月,Sky 重命名爲 Flutter
  • 2018 年 2 月,在 2018 年移動世界大會上 Flutter beta 1 官宣
  • 2018 年 4 月,Flutter beta 2 官宣
  • 2018 年 5 月,在 Google I / O 上 Flutter beta 3 官宣。2018 年 6 月,Flutter 預覽版1發佈
  • 2018 年 9 月,Flutter 預覽版2發佈
  • 2018 年 12 月,Flutter 正式版1.0發佈

Flutter

Flutter 分爲 Framework和 Engine,咱們是基於運行在 Engine 上的Framework進行開發App。下面分別對各個模塊進行介紹:函數

走進Flutter

Framework

Material

Flutter提供了一套豐富的Material widget,可幫助您構建遵循Material Design的應用程序。佈局

Cupertino

Flutter也提供了一套豐富的Cupertino(iOS)風格的widget性能

Widgets

Flutter Widget採用現代響應式框架構建,聽說是從 React 中得到的靈感。widget的主要工做是實現一個build函數,用以構建自身。一個widget一般由一些較低級別widget組成。Flutter框架將依次構建這些widget,直到構建到最底層的子widget時,這些最低層的widget一般爲RenderObject,它會計算並描述widget的幾何形狀。學習

Rendering動畫

Flutter Widgets庫使用RenderObject層次結構來實現其佈局和繪製後端。 能夠在應用程序中使用自定義RenderBox類來處理特定效果。但大多數狀況下,都只是使用RenderObject層次調試佈局問題。ui

若是直接在Rendering庫上開發本身的庫或應用程序,須要進行綁定(BindingBase)。默認的Widgets已經有Flutter完成綁定。 也可使用RenderingFlutterBinding,建立本身的綁定。至少須要導入ServicesBinding,GestureBinding,SchedulerBinding,PaintingBinding和RendererBinding。

Animation

Flutter 動畫庫,提供兩種動畫類型tween和physics-based。

  1. Tween動畫「介於二者之間」的簡稱。在Tween中,定義了開始點和結束點、時間線以及定義轉換時間和速度的曲線。而後由框架計算如何從開始點過渡到結束點。
  2. physics-based動畫在physics-based動畫中,運動被模擬爲與真實世界類似的行爲。例如,當你擲球時,它在何處落地,取決於拋球速度有多快、球有多重、距離地面有多遠。 相似地,將鏈接在彈簧上的球落下(並彈起)與鏈接到繩子上的球放下的方式也是不一樣。

Painting

該庫包含Flutter引擎的繪製API,用於更專業的目的,例如繪製縮放圖像,在陰影之間插值,在框周圍繪製邊框等。

Gestures

Gesture提供了手勢識別相關的功能,包括觸摸事件類定義和多種內置的手勢識別器。

Engine

Flutter 引擎所有使用C++實現,提供Dart運行時和文字排版引擎(libtxt)和繪圖引擎Skia。SKia是一個 2D的繪圖引擎庫,能夠直接將數據經過OpenGL或者 Vulkan,傳給GPU進行繪製。Chrome和 Android均採用 Skia做爲繪圖引擎。Skia提供了很是友好的 API,而且在圖形轉換、文字渲染、位圖渲染方面都提供了友好、高效的表現。Skia是跨平臺的,因此能夠被嵌入到 Flutter的 iOS SDK中,而不用去研究 iOS閉源的 Core Graphics / Core Animation。

相關文章
相關標籤/搜索