https://pan.baidu.com/s/1pD7W-haO5FbbGsu0t3sA_w 提取碼: wv6m
https://share.weiyun.com/mDuF95rR 密碼:c7r3ec
一、Flutter基礎(chǔ)概念
Flutter 框架的核心概念是 Widget、Element、RenderObject。Widget 是 Flutter 應(yīng)用的構(gòu)建塊,是一種不可變的樹(shù)形結(jié)構(gòu),描述了應(yīng)用的布局和狀態(tài)。Element 是 Widget 的實(shí)例化表示,用于連接 Widget 和 RenderObject。RenderObject 是 Flutter 框架的渲染樹(shù)節(jié)點(diǎn),負(fù)責(zé)實(shí)際的 UI 布局和繪制。
Flutter 應(yīng)用的根 Widget 是整個(gè)應(yīng)用的頂層容器,所有的 Widget 都由根 Widget 派生而來(lái)。Flutter 框架采用了響應(yīng)式編程模式,每個(gè) Widget 都可以根據(jù)其狀態(tài)和父 Widget 的狀態(tài)進(jìn)行更新。這種響應(yīng)式編程模式使得 Flutter 應(yīng)用可以實(shí)現(xiàn)高度可定制的交互界面和流暢的用戶(hù)體驗(yàn)。
二、Flutter 核心架構(gòu)
Flutter 框架的核心架構(gòu)由三個(gè)主要組件構(gòu)成:Flutter Engine、Flutter Framework 和 UI 庫(kù)。
Flutter Engine 是一個(gè)高效的運(yùn)行時(shí)引擎,負(fù)責(zé)解析和運(yùn)行 Dart 代碼,并將其轉(zhuǎn)換為原生平臺(tái)所支持的渲染樹(shù)。Flutter Engine 具有高效的 JIT(即時(shí)編譯)和 AOT(提前編譯)能力,能夠大大提高應(yīng)用的運(yùn)行速度和性能。
Flutter Framework 是一個(gè)基于 Dart 語(yǔ)言的框架,包含了 Flutter 應(yīng)用開(kāi)發(fā)的所有核心庫(kù)和工具。Flutter Framework 提供了豐富的 UI 組件庫(kù)、布局庫(kù)、動(dòng)畫(huà)庫(kù)、網(wǎng)絡(luò)請(qǐng)求庫(kù)等,使得開(kāi)發(fā)者可以快速構(gòu)建復(fù)雜的移動(dòng)應(yīng)用。
UI 庫(kù)是 Flutter 框架的最終表現(xiàn)形式,它包含了各種 UI 控件和主題。UI 庫(kù)是可組合的、可擴(kuò)展的,開(kāi)發(fā)者可以根據(jù)自己的需求選擇和組合不同的 UI 控件和主題,打造出自己的個(gè)性化應(yīng)用。
三、Flutter 組件庫(kù)
Flutter 框架提供了豐富的組件庫(kù),包括基礎(chǔ) UI 控件、布局控件、動(dòng)畫(huà)控件、卡片控件、滑塊控件、開(kāi)關(guān)控件等。這些組件可以輕松地組合和使用,使得開(kāi)發(fā)者可以快速構(gòu)建復(fù)雜的移動(dòng)應(yīng)用。
以下是一些常用的 Flutter 組件:
Text:文本控件,用于顯示文本內(nèi)容。
Icon:圖標(biāo)控件,用于顯示各種圖標(biāo)。
Button:按鈕控件,用于實(shí)現(xiàn)各種按鈕功能。
Container:容器控件,用于包含其他 UI 控件。
Center:居中布局控件,用于將子控件居中顯示。
Row:行布局控件,用于將子控件水平排列。
Column:列布局控件,用于將子控件垂直排列。
Card:卡片控件,用于顯示卡片樣式的內(nèi)容。
Slide:滑塊控件,用于實(shí)現(xiàn)滑塊功能。
Switch:開(kāi)關(guān)控件,用于實(shí)現(xiàn)開(kāi)關(guān)功能。
除了官方提供的組件庫(kù),F(xiàn)lutter 還支持自定義組件和第三方組件,開(kāi)發(fā)者可以根據(jù)自己的需求設(shè)計(jì)和使用組件。
四、渲染模型
你可能思考過(guò):既然 Flutter 是一個(gè)跨平臺(tái)的框架,那么它如何提供與原生平臺(tái)框架相當(dāng)?shù)男阅埽?br />
讓我們從安卓原生應(yīng)用的角度開(kāi)始思考。當(dāng)你在編寫(xiě)繪制的內(nèi)容時(shí),你需要調(diào)用 Android 框架的 Java 代碼。 Android 的系統(tǒng)庫(kù)提供了可以將自身繪制到 Canvas 對(duì)象的組件,接下來(lái) Android 就可以使用由 C/C++ 編寫(xiě)的 Skia 圖像引擎,調(diào)用 CPU 和 GPU 完成在設(shè)備上的繪制。
通常來(lái)說(shuō),跨平臺(tái)框架都會(huì)在 Android 和 iOS 的 UI 底層庫(kù)上創(chuàng)建一層抽象,該抽象層嘗試抹平各個(gè)系統(tǒng)之間的差異。這時(shí),應(yīng)用程序的代碼常常使用 JavaScript 等解釋型語(yǔ)言來(lái)進(jìn)行編寫(xiě),這些代碼會(huì)與基于 Java 的 Android 和基于 Objective-C 的 iOS 系統(tǒng)進(jìn)行交互,最終顯示 UI 界面。所有的流程都增加了顯著的開(kāi)銷(xiāo),在 UI 和應(yīng)用邏輯有繁雜的交互時(shí)更為如此。
相比之下,F(xiàn)lutter 通過(guò)繞過(guò)系統(tǒng) UI 組件庫(kù),使用自己的 widget 內(nèi)容集,削減了抽象層的開(kāi)銷(xiāo)。用于繪制 Flutter 圖像內(nèi)容的 Dart 代碼被編譯為機(jī)器碼,并使用 Skia 進(jìn)行渲染。 Flutter 同時(shí)也嵌入了自己的 Skia 副本(未來(lái)會(huì)遷移到 Impeller),讓開(kāi)發(fā)者能在設(shè)備未更新到最新的系統(tǒng)時(shí),也能跟進(jìn)升級(jí)自己的應(yīng)用,保證穩(wěn)定性并提升性能。
五、安裝Flutter SDK
下載 Flutter SDK: 首先,您需要下載 Flutter SDK。您可以在 Flutter 的官方網(wǎng)站 上找到下載鏈接。根據(jù)您的操作系統(tǒng)選擇正確的下載鏈接(Windows、macOS 或 Linux)。
解壓文件: 下載完成后,將下載的壓縮文件解壓到您希望安裝 Flutter 的目錄。例如,在您的用戶(hù)主目錄下(對(duì)于 macOS 和 Linux)或在 C 盤(pán)根目錄下(對(duì)于 Windows)。
設(shè)置環(huán)境變量: 為了能夠在命令行中運(yùn)行 Flutter 命令,您需要將 Flutter 的 bin 目錄添加到系統(tǒng)的 PATH 環(huán)境變量中。具體的步驟因操作系統(tǒng)而異:
Windows: 將解壓后的 flutter/bin 目錄添加到系統(tǒng)環(huán)境變量 PATH 中。
macOS 和 Linux: 在終端中執(zhí)行以下命令,將 Flutter 添加到 PATH 中:
export PATH="$PATH:`pwd`/flutter/bin"
檢查安裝: 在命令行中運(yùn)行以下命令,確認(rèn) Flutter 是否已成功安裝:
flutter --version
六、三、 Flutter的優(yōu)點(diǎn)
1、跨平臺(tái)的優(yōu)點(diǎn)不必多說(shuō)
2、Flutter默認(rèn)Meteria UI,開(kāi)發(fā)起來(lái)賊溜
3、hot reload的開(kāi)發(fā)模式非常方便,基本上做到實(shí)時(shí)查看改變的UI
4、將來(lái)發(fā)布的 Fuchsia OS 就欽定了 Flutter 作為 UI Toolkit
5、從性能上來(lái)講,F(xiàn)lutter是加分的。
七、Flutter的缺點(diǎn)
1、使用Dart開(kāi)發(fā)容易造火箭
2、目前處于beta版本,商業(yè)化的話(huà)還需要再等等。
3、對(duì)于IOS UIKit來(lái)說(shuō),F(xiàn)lutter Meterial Design還不能取代之,只能作為一種補(bǔ)充。
4、在Android 平臺(tái)上,一個(gè)架構(gòu)的SO居然要7M左右,簡(jiǎn)直不能忍。