本書采用由淺入深的方式介紹Flutter技術原理,分為三篇15章,主要內容如下:
?入門篇(第1章~第5章),包括Flutter技術的出現(xiàn)背景和簡介、Flutter的各種類型的Widget以及如何構建UI。通過學習本章,讀者可以掌握如何使用Flutter來構建UI界面。
?進階篇(第6章~第14章),包括可滾動組件、事件機制、動畫、自定義組件、文件和網(wǎng)絡、國際化以及Flutter核心原理等。通過本章內容,讀者可以對Flutter整體構建及原理有一個深入的認識。
?實例篇(第15章),本章主要通過一個簡版的Github App來將前面介紹的內容串起來,讓開發(fā)者對一個完整的Flutter App開發(fā)流有個了解。
1.本書由Flutter中文網(wǎng)社區(qū)創(chuàng)始人、網(wǎng)紅暢銷書《Flutter實戰(zhàn)》作者撰寫,根據(jù)Flutter3.0版本技術迭代對第1版內容進行大量更新和重構,增加一些實例解析核心技術原理,并在進階篇對Flutter技術中相對較深但很重要的內容進行了深入介紹。另外,書中還添加了一些動態(tài)圖二維碼,方便讀者在閱讀時掃描二維碼體驗動態(tài)圖效果。2.本書適合PC客戶端、移動開發(fā)或Web前端開發(fā)者和想學習Flutter技術更新進階實戰(zhàn)的Flutter初學者閱讀參考。3.讀者可以免費下載隨書源代碼:https://github.com/wendux/flutter_in_action_2。另外,由于本書實例中實現(xiàn)了不少通用性較強的組件,為了方便讀者復用,作者將通用性較強的組件都添加到了 Flukit 開源項目,它是作者維護的一個Flutter開源組件庫,項目地址是:https://github.com/flutterchina/flukit。
轉眼間從《Flutter實戰(zhàn)》第1版電子版發(fā)布到現(xiàn)在已經(jīng)接近兩年時間,這兩年中,第1版實體書出版并成為Flutter技術類暢銷書之一,其電子版官網(wǎng)UV用戶數(shù)超過60萬,日訪問量長期穩(wěn)定在3500人左右。當然,取得如此成績最主要的一個原因是這兩年 Flutter 技術熱度持續(xù)提高,整個 Flutter 生態(tài)和社區(qū)也發(fā)生了翻天覆地的變化,主要體現(xiàn)在:
Flutter穩(wěn)定版發(fā)布到了3.0,現(xiàn)在已經(jīng)支持移動端、Web端和PC端,通過Flutter 開發(fā)的應用程序能夠輕松地在各個平臺遷移并獲得很好的性能。
Flutter 在 GitHub Star 數(shù)上排名已經(jīng)進入了前20,在跨端框架中排名第一。
全球很多公司,比如Google、微軟、阿里巴巴、字節(jié)跳動、百度、京東等,都已經(jīng)在商業(yè)項目中使用 Flutter,已經(jīng)有很多成功案例。
Flutter 第三方庫數(shù)量持續(xù)保持高速增長,有越來越多的人為Flutter生態(tài)貢獻代碼。Flutter 相關的教程、圖書數(shù)量也在高速增長。
綜上,可見Flutter 技術從第一個測試版發(fā)布到現(xiàn)在,在短短 3 年多時間獲得了巨大的成功,主要原因是:使用Flutter 既能保持很高的開發(fā)效率,又能獲得良好的性能。根據(jù)近幾年的實踐數(shù)據(jù),F(xiàn)lutter 相比原生開發(fā),效能提高近一倍,而性能方面可以接近原生開發(fā)。
正是因為Flutter 技術發(fā)展太快,《Flutter實戰(zhàn)》第1版中的部分內容已經(jīng)過時,在讀者朋友們的催促下,才有了第2版。
第2版的變化
相較第1版,本書主要有以下變化:
基于 Flutter 3.0編寫。
修改和重構了60% 的內容,添加了更多的示例,對部分章節(jié)的順序進行了調整,使學習的梯度更加合理,以期能夠循序漸進地幫助讀者了解Flutter。
進階篇對Flutter技術中相對深入但很重要的內容進行了詳細介紹,比如與Sliver布局協(xié)議、渲染相關的 Layer,以及通過定義 RenderObject 的方式來定義組件。
在介紹Flutter 核心技術原理時,添加了很多實例來幫助讀者理解Flutter的布局、繪制等原理。
聚焦于Flutter技術本身,刪除了一些和具體平臺相關的內容,比如Android和iOS的插件開發(fā),以及如何進行原生 Flutter混合開發(fā)等。這些內容讀者可以去Flutter官網(wǎng)查找相應教程。
電子版中添加了一些動圖。
修改了第1版中的一些錯誤。
本書結構
本書由淺入深地介紹Flutter技術原理,分為三篇,共15章,各篇的主要內容如下。
入門篇(第1~5章),包括Flutter技術的出現(xiàn)背景和簡介、Flutter的各種Widget以及如何構建UI(User Interface,用戶界面)。通過學習本篇內容,讀者可以掌握如何使用Flutter來構建UI界面。
進階篇(第6~14章),包括可滾動組件、事件機制、動畫、自定義組件、文件和網(wǎng)絡、國際化以及Flutter核心原理等。通過學習本篇內容,讀者可以對Flutter整體構建及原理有一個深入的認識。
實例篇(第15章),本篇主要通過一個簡版的GitHub App來將前面介紹的內容串起來,讓開發(fā)者對一個完整的Flutter App開發(fā)流程有所了解。
因為Flutter的很多知識點是相互交織的,很難將它們徹底劃分開,所以本書中難免會出現(xiàn)一些相互引用的場景,比如在入門篇介紹進度指示器時會用到在進階篇才介紹的動畫相關知識。對于這種情況,會在相應的章節(jié)進行說明。讀者可以直接跳讀相應知識點后再返回,也可以先有個印象,待學習到后面相關章節(jié)時再回頭來看。
本書特色
我在大學時讀過侯捷(真名侯俊杰)寫的一些 C 相關的書籍,在他的《深入淺出MFC》一書中,有一句話讓我印象非常深刻:唯有深入,方能淺出。我非常認同這句話,對于一門技術,只有了解得深入,才能用淺顯、通俗的語言描述出來。我在寫作本書時,深入淺出就是一個主要目標。所以,本書的目標不僅是想告訴讀者如何使用Flutter,而且也非常關注各個知識點的底層實現(xiàn)以及設計思想。從本書章節(jié)劃分上來看,入門篇為淺出,進階篇則是深入。另外,由于PC客戶端開發(fā)、移動開發(fā)、Web開發(fā)這些經(jīng)驗我都有,而Flutter本質上是一個UI系統(tǒng),而UI系統(tǒng)的設計和實現(xiàn)在大前端開發(fā)下有很多相通之處,所以在闡述本書中的一些知識點時,我也會對比一些其他UI系統(tǒng)(主要是 Android 或 Web)的相應實現(xiàn),以便有相關開發(fā)經(jīng)驗的讀者對比理解。
讀者對象
至少熟悉一種編程語言的讀者。
接觸過PC客戶端開發(fā)、移動開發(fā)或Web前端開發(fā)的讀者。
有一定編程基礎的讀者。
關于隨書源代碼
隨書源代碼網(wǎng)址:https://github.com/wendux/flutter_in_action_2。
由于本書實例中實現(xiàn)了不少通用性較強的組件,為了方便復用,我將通用性較強的組件都添加到了Flukit開源項目中,這是我維護的一個Flutter開源組件庫,項目地址是https://github.com/flutterchina/flukit 。
勘誤
由于Flutter SDK在不斷更新,本書中的部分內容(如類的繼承關系、參數(shù)等)可能會與新版本的Flutter不一致,建議讀者以最新的Flutter SDK為準。另外,由于水平有限,書中難免有錯誤之處,如果發(fā)現(xiàn)錯誤,可以在本書GitHub項目issue列表中反饋,地址是https:// github.com/flutterchina/flutter-in-action-2nd/issues。另外,你也可以關注本書電子版(https://book.flutterchina.club),電子版中會定期修正錯誤并更新內容。
杜文(網(wǎng)名wendux),F(xiàn)lutter中文網(wǎng)社區(qū)創(chuàng)辦者、Flutter中文社區(qū)開源項目發(fā)起人、掘金知名專欄作者、GitHub社區(qū)知名開發(fā)者,也是dio、flukit、fly.js等多個知名開源項目作者,曾先后就職于百度、小贏科技、字節(jié)跳動,多年從事PC桌面開發(fā)、移動端開發(fā)以及Web開發(fā),對大前端方向有著廣泛的涉獵及豐富的開發(fā)經(jīng)驗。
第一篇 入門篇
第1章 起步 2
1.1 移動開發(fā)技術簡介 2
1.2 初識Flutter 9
1.3 搭建Flutter開發(fā)環(huán)境 13
1.4 Dart語言簡介 25
第2章 第一個Flutter應用 36
2.1 計數(shù)器應用示例 36
2.2 Widget簡介 42
2.3 狀態(tài)管理 57
2.4 路由管理 63
2.5 包管理 71
2.6 資源管理 74
2.7 調試Flutter應用 80
2.8 Flutter異常捕獲 87
第3章 基礎組件 92
3.1 文本及樣式 92
3.2 按鈕 97
3.3 圖片及ICON 98
3.4 單選開關和復選框 105
3.5 輸入框及表單 106
3.6 進度指示器 117
第4章 布局類組件 122
4.1 布局類組件簡介 122
4.2 布局原理與約束 123
4.3 線性布局 129
4.4 彈性布局 133
4.5 流式布局 136
4.6 層疊布局 139
4.7 對齊與相對定位 142
4.8 LayoutBuilder、AfterLayout 146
第5章 容器類組件 153
5.1 填充 153
5.2 裝飾容器 154
5.3 變換 156
5.4 容器組件 159
5.5 剪裁 161
5.6 空間適配 163
5.7 頁面骨架 169
第二篇 進階篇
第6章 可滾動組件 176
6.1 可滾動組件簡介 176
6.2 SingleChildScrollView 181
6.3 ListView 182
6.4 滾動監(jiān)聽及控制 191
6.5 AnimatedList 197
6.6 GridView 199
6.7 PageView與頁面緩存 204
6.8 可滾動組件子項緩存 206
6.9 TabBarView 210
6.10 CustomScrollView 和 Sliver 214
6.11 自定義 Sliver 223
6.12 嵌套可滾動組件
NestedScrollView 237
第7章 功能型組件 246
7.1 導航返回攔截 246
7.2 數(shù)據(jù)共享 247
7.3 跨組件狀態(tài)共享 252
7.4 顏色和主題 261
7.5 按需重構 266
7.6 異步UI更新 268
7.7 對話框詳解 272
第8章 事件處理與通知 290
8.1 原始指針事件處理 290
8.2 手勢識別 292
8.3 Flutter事件機制 297
8.4 手勢原理與手勢沖突 310
8.5 事件總線 318
8.6 通知 319
第9章 動畫 326
9.1 Flutter動畫簡介 326
9.2 動畫基本結構及狀態(tài)監(jiān)聽 330
9.3 自定義路由切換動畫 335
9.4 Hero動畫 338
9.5 交織動畫 343
9.6 動畫切換組件 346
9.7 動畫過渡組件 353
第10章 自定義組件 362
10.1 自定義組件方法簡介 362
10.2 組合現(xiàn)有組件 363
10.3 組合實例:TurnBox 366
10.4 CustomPaint與Canvas 370
10.5 自繪實例:圓形背景漸變
進度條 375
10.6 自繪組件:CustomCheckbox 382
10.7 自繪組件: DoneWidget 393
10.8 水印組件實例:文本繪制與
離屏渲染 396
第11章 文件操作與網(wǎng)絡請求 413
11.1 文件操作 413
11.2 通過HttpClient發(fā)起HTTP
請求 415
11.3 HTTP請求庫dio 422
11.4 實例:HTTP分塊下載 424
11.5 使用WebSocket 429
11.6 使用Socket API 432
11.7 JSON轉Dart Model類 433
第12章 Flutter 擴展 444
12.1 包和插件 444
12.2 Flutter Web 446
第13章 國際化 449
13.1 讓App支持多語言 449
13.2 實現(xiàn)Localizations 453
13.3 使用Intl包 455
13.4 國際化常見問題 459
第14章 Flutter核心原理 461
14.1 Flutter UI框架 461
14.2 Element、BuildContext和RenderObject 463
14.3 Flutter啟動流程和渲染管線 468
14.4 布局過程 477
14.5 繪制一:繪制原理及Layer 492
14.6 繪制二:組件樹繪制流程 496
14.7 繪制三:Layer 實例 505
14.8 繪制四:Compositing 510
第三篇 實例篇
第15章 一個完整的Flutter應用 524
15.1 GitHub客戶端示例 524
15.2 Flutter App代碼結構 525
15.3 Model類定義 526
15.4 全局變量及共享狀態(tài) 529
15.5 網(wǎng)絡請求封裝 532
15.6 App入口及主頁 536
15.7 登錄頁 547
15.8 多語言和多主題 549
推薦閱讀 553