有趣的Flutter 從0到1構(gòu)建跨平臺App
定 價:99.8 元
叢書名:圖靈原創(chuàng)
- 作者:任宇杰 王志宇 魏國梁 臧成威
- 出版時間:2022/1/1
- ISBN:9787115576507
- 出 版 社:人民郵電出版社
- 中圖法分類:TN929.53
- 頁碼:
- 紙張:
- 版次:
- 開本:16開
本書通過一個實際的Flutter App,為大家介紹Flutter相關(guān)的知識。書中首先介紹了Flutter的環(huán)境配置、各種IDE的工具配置以及怎樣運行一個簡單的Flutter 程序。然后介紹了Dart語言的一些基本概念。接著利用Flutter基本的容器組件、圖片組件以及布局組件,教讀者創(chuàng)建一個簡單的待辦事項應(yīng)用的原型界面,并介紹Flutter UI的布局思路以及原理。后,介紹如何通過更加復(fù)雜的組件的不同組合,讓待辦事項應(yīng)用識別復(fù)雜的手勢以及在精妙的動畫和頁面之間完成路由跳轉(zhuǎn)。
1.一線大廠 BAT 移動開發(fā)者經(jīng)驗總結(jié);
2.教你從零開始構(gòu)建一個完整的待辦事項 App,Android和iOS都適用;
3.阿里宗心、字節(jié)跳動袁輝輝、CFUG核心成員王鑫磊傾力推薦。
任宇杰
移動開發(fā)者,在利用 Flutter 構(gòu)建跨端容器方面有比較深入的研究。
王志宇
移動開發(fā)者,具有多年跨端容器開發(fā)經(jīng)驗。
魏國梁
移動開發(fā)者,在 Flutter 底層以及利用Flutter 進行自繪引擎建設(shè)上有比較深入的研究。
臧成威
移動開發(fā)者,經(jīng)歷了從 iOS 5 至今的各個時代,對客戶端研發(fā)模式、多語言范式有著較深的理解。他是 Flutter 的首批嘗鮮者,對 Flutter 底層應(yīng)用和自繪有著深入的研究。
第 一部分 Flutter 的基礎(chǔ)知識
第 1章 Flutter 概述 2
1.1 Flutter 的橫空出世 2
1.1.1 Flutter 的前身——Sky 2
1.1.2 Flutter 版本的歷史 2
1.2 Flutter 的技術(shù)亮點 4
1.2.1 跨平臺的精美設(shè)計 4
1.2.2 跨平臺的高生產(chǎn)力 6
1.2.3 跨平臺的高效表現(xiàn) 7
1.2.4 可擴展的開放平臺 7
1.3 小結(jié) 8
第 2章 Dart 語言概述 9
2.1 基本數(shù)據(jù)類型 9
2.1.1 數(shù)字 9
2.1.2 字符串 10
2.1.3 布爾 10
2.1.4 列表 10
2.1.5 集合 11
2.1.6 映射 11
2.2 函數(shù) 12
2.2.1 聲明 12
2.2.2 參數(shù) 12
2.2.3 閉包 13
2.2.4 main 函數(shù) 14
2.2.5 匿名函數(shù) 14
2.3 流程控制 14
2.3.1 利用 if 來判斷 15
2.3.2 利用 for/while 來循環(huán) 15
2.3.3 利用 switch 來選擇 16
2.4 異常處理 16
2.4.1 拋出異!16
2.4.2 捕獲異!17
2.4.3 使用 finally 保證代碼一定被執(zhí)行 17
2.5 類 18
2.5.1 類的成員變量 18
2.5.2 類的構(gòu)造方法 19
2.5.3 使用 getter 和 setter 20
2.5.4 繼承 20
2.5.5 抽象機制與抽象類 21
2.5.6 隱式接口 21
2.5.7 繼承之外的另一種選擇:mixin 22
2.6 泛型 23
2.6.1 泛型與類型安全 23
2.6.2 在定義中使用泛型 24
2.6.3 在函數(shù)中使用泛型 24
2.6.4 限定泛型的類型 25
2.7 異步 25
2.7.1 什么是異步 25
2.7.2 Future 對象與 async/await 關(guān)鍵字 25
2.7.3 使用 async for 處理 Stream 對象 26
2.8 引入外部代碼 27
2.8.1 利用 import 關(guān)鍵字引入其他框架中的代碼 27
2.8.2 利用 as 關(guān)鍵字防止外部框架沖突 27
2.9 小結(jié) 28
第3章 環(huán)境搭建 29
3.1 在 Windows 系統(tǒng)搭建環(huán)境 29
3.1.1 下載開發(fā)工具 Android Studio 29
3.1.2 搭建 Android 開發(fā)環(huán)境 31
3.1.3 安裝 Flutter SDK 34
3.2 在 Mac 系統(tǒng)搭建環(huán)境 35
3.2.1 下載開發(fā)工具 Android Studio 35
3.2.2 搭建 Android 開發(fā)環(huán)境 36
3.2.3 搭建 iOS 開發(fā)環(huán)境 37
3.2.4 安裝 Flutter SDK 39
3.3 小結(jié) 39
第4章 著手做第 一個 Flutter 程序 40
4.1 第 一個 Flutter 項目 40
4.2 Flutter 項目的文件結(jié)構(gòu) 42
4.3 小結(jié) 43
第5章 調(diào)試工具 44
5.1 如何使用斷點 44
5.1.1 普通斷點與條件斷點 44
5.1.2 step in 和 step over 46
5.2 HotReload 和 HotRestart 46
5.2.1 使用 HotReload 加快 UI 開發(fā) 47
5.2.2 理解 HotRestart 47
5.3 使用 Android Studio 中的 DevTools 47
5.3.1 使用 Flutter Inspector 查看 UI 結(jié)構(gòu) 48
5.3.2 使用 Flutter Outline 查看代碼結(jié)構(gòu) 50
5.4 小結(jié) 50
第6章 Widget 概述 51
6.1 Widget 的概述 51
6.1.1 文本展示:Text 組件 52
6.1.2 文本輸入:TextField 組件 57
6.1.3 圖片展示:Image 組件 58
6.1.4 處理點擊:Button 組件 60
6.2 利用 Widget 實現(xiàn)布局 62
6.2.1 布局容器:Container 62
6.2.2 彈性盒子布局:Flex、Row、Column 和 Expanded 64
6.2.3 流式布局:Wrap 和 Flow 72
6.2.4 層疊布局:Stack 和 Position 76
6.3 滾動布局 78
6.3.1 單列內(nèi)容滾動:ListView 78
6.3.2 展示多列內(nèi)容:GridView 83
6.4 Material 與 Cupertino 89
6.4.1 通用樣式 Widget 一覽 89
6.4.2 Material 的獨有樣式 Widget 一覽 91
6.4.3 Cupertino 的獨有樣式 Widget 一覽 93
6.5 小結(jié) 94
第二部分 動手做一個待辦事項應(yīng)用
第7章 我們要做一個什么樣的應(yīng)用 96
7.1 頁面一覽 96
7.2 整體技術(shù)點一覽 100
第8章 第 一個頁面——“登錄”頁面 102
8.1 搭建 UI 框架 103
8.1.1 創(chuàng)建登錄頁面文件 103
8.1.2 搭建整體結(jié)構(gòu) 104
8.1.3 布局文本框組件 106
8.1.4 繼續(xù)完善細(xì)節(jié) 109
8.2 填充組件 113
8.2.1 填充圖片組件 113
8.2.2 填充郵箱和密碼輸入框 117
8.2.3 登錄按鈕與注冊提示按鈕 117
8.3 為頁面增加本地邏輯 123
8.3.1 處理鍵盤遮擋問題 123
8.3.2 處理焦點 131
8.3.3 為文本輸入框增加校驗邏輯 136
8.4 小結(jié) 138
第9章 跳轉(zhuǎn)到第二個頁面 139
9.1 簡單的頁面跳轉(zhuǎn) 139
9.1.1 Navigator 初探:簡單的路由跳轉(zhuǎn) 140
9.1.2 Navigator 再探:命名路由 143
9.1.3 Navigator 終探:路由傳參 144
9.2 為頁面跳轉(zhuǎn)添加自定義的過渡效果 146
9.2.1 實現(xiàn)漸變的頁面過渡 146
9.2.2 了解頁面過渡的原理 147
9.3 完善我們的“注冊”頁面 150
9.3.1 處理 “注冊”頁面中的用戶頭像 151
9.3.2 處理“登錄”頁面與“注冊”頁面之間的跳轉(zhuǎn)邏輯 155
9.4 小結(jié) 156
第 10章 待辦事項應(yīng)用的靈魂——“列表”頁面 157
10.1 構(gòu)建帶有 BottomNavigationBar 的頁面 157
10.1.1 創(chuàng)建 BottomNavigationBar 158
10.1.2 使用 StatefulWidget 完成頁面轉(zhuǎn)換 163
10.1.3 用正確的方式構(gòu)建 body 165
10.2 使用 ListView 構(gòu)建頁面 169
10.2.1 準(zhǔn)備數(shù)據(jù) 169
10.2.2 用 ListView 展示待辦事項 173
10.3 為 ListView 增加簡單的事件交互 178
10.3.1 為待辦事項添加事件回調(diào) 178
10.3.2 添加事件回調(diào)的具體邏輯 180
10.3.3 完善列表的排序功能 183
10.4 小結(jié) 186
第 11章 添加、編輯、查看 TODO——待辦事項編輯頁 187
11.1 構(gòu)建簡單的表單頁面 187
11.1.1 搭建頁面框架 187
11.1.2 封裝帶有標(biāo)題的 LabelGroup 組件 189
11.1.3 構(gòu)建待辦事項的標(biāo)題和描述文本框 191
11.2 構(gòu)建較為復(fù)雜的日期選擇器組件和時間選擇器 195
11.2.1 了解 DatePicker 和 TimePicker 196
11.2.2 封裝日期選擇器和時間選擇器 198
11.2.3 構(gòu)建日期選擇器和時間選擇器 200
11.3 構(gòu)建優(yōu)先級展示框 204
11.3.1 實現(xiàn)優(yōu)先級展示框 204
11.3.2 實現(xiàn)優(yōu)先級彈出菜單 206
11.4 完善表單細(xì)節(jié)內(nèi)容 209
11.4.1 完善表單中的細(xì)節(jié)內(nèi)容 209
11.4.2 將新創(chuàng)建的待辦事項添加到列表中 210
11.5 小結(jié) 213
第 12章 讓我們的應(yīng)用更加完美 214
12.1 了解 Flutter 中的動畫 214
12.1.1 Animation 類 214
12.1.2 AnimationController 類 216
12.1.3 CurvedAnimation 類 217
12.1.4 Tween 類 218
12.2 動手為我們的待辦事項應(yīng)用增加動畫 219
12.2.1 為“登錄”頁面增加動畫 219
12.2.2 使用 AnimatedWidget 封裝動畫 221
12.2.3 為登錄 Logo 增加 Hero 動畫 224
12.2.4 為“列表”頁面增加動畫 231
12.3 利用 PlatformChannel 實現(xiàn)定位功能 234
12.3.1 了解 PlatformChannel 的基本模式 234
12.3.2 使用 PlatformChannel 寫 Dart 端代碼 235
12.3.3 使用 PlatformChannel 編寫 Android 端代碼 239
12.3.4 使用 PlatformChannel 編寫 iOS 端的代碼 240
12.4 利用 PlatformView 實現(xiàn)地址詳情功能 241
12.4.1 了解 PlatformView 的基本模式 241
12.4.2 在 Dart 端使用 PlatformView 242
12.4.3 在 Android 端注冊 PlatformView 245
12.4.4 在 iOS 端注冊 PlatformView 246
12.5 使用封裝好的 PlatformView 構(gòu)建隱私策略頁面 248
12.5.1 引入 webview_flutter 249
12.5.2 使用 webview_flutter 249
12.6 小結(jié) 251
第 13章 為我們的待辦事項應(yīng)用增加完整的處理邏輯 252
13.1 完成多頁面之間的數(shù)據(jù)共享 252
13.1.1 利用公共父頁面共享數(shù)據(jù) 252
13.1.2 同步數(shù)據(jù)變化 254
13.2 為“登錄”頁面和“注冊”頁面增加網(wǎng)絡(luò)請求 257
13.2.1 HTTP 的基礎(chǔ)知識 258
13.2.2 利用我們提供的服務(wù)器完成網(wǎng)絡(luò)請求 259
13.2.3 使用 http 模塊發(fā)送網(wǎng)絡(luò)請求 260
13.3 將數(shù)據(jù)緩存在本地 266
13.3.1 保存登錄狀態(tài) 266
13.3.2 保存列表信息 269
13.4 將本地數(shù)據(jù)上傳到網(wǎng)絡(luò) 274
13.4.1 將數(shù)據(jù)上傳到服務(wù)器 274
13.4.2 從服務(wù)器獲取數(shù)據(jù) 277
13.5 小結(jié) 281
第 14章 是時候發(fā)布啦 282
14.1 發(fā)布應(yīng)用前需要了解的一些基礎(chǔ)知識 282
14.2 發(fā)布 Android 應(yīng)用 283
14.2.1 在各個平臺注冊開發(fā)者賬號 283
14.2.2 發(fā)布前檢查 283
14.2.3 修改 Icon 284
14.2.4 配置應(yīng)用發(fā)布簽名 286
14.3 發(fā)布 iOS 應(yīng)用 290
14.3.1 加入蘋果公司的開發(fā)者計劃 290
14.3.2 發(fā)布前檢查 290
14.3.3 更改 Icon 和啟動圖 291
14.3.4 創(chuàng)建應(yīng)用的歸檔 293
14.3.5 將應(yīng)用發(fā)布到 App Store 295
14.4 小結(jié) 295
第三部分 Flutter 的擴展功能
第 15章 深入理解狀態(tài)管理 298
15.1 狀態(tài)管理的理論知識 298
15.1.1 什么是狀態(tài)管理 298
15.1.2 Flutter 中的狀態(tài)管理 300
15.2 狀態(tài)管理的代碼實現(xiàn) 301
15.2.1 了解如何使用 InheritedWidget 301
15.2.2 InheritedWidget 的原理 303
15.2.3 使用 Provider 包完成狀態(tài)管理 306
15.3 小結(jié) 308
第 16章 你不能錯過的優(yōu)秀工具 309
16.1 代碼靜態(tài)分析 309
16.1.1 了解 IDE 中的 Dart Analysis 309
16.1.2 了解 Dart Analysis 的配置規(guī)則 310
16.2 代碼格式化 312
16.3 Dart DevTools 314
16.3.1 在 IDE 中打開 Dart DevTools 314
16.3.2 使用 Timeline 查看應(yīng)用的性能損耗 316
16.3.3 使用 Memory 查看應(yīng)用的內(nèi)存占用情況 317
16.4 小結(jié) 317
第 17章 在 Flutter 中如何更好地與后臺交互 318
17.1 數(shù)據(jù)處理概覽 318
17.1.1 將 JSON 數(shù)據(jù)解析為 Map 數(shù)據(jù) 318
17.1.2 手動創(chuàng)建模型類處理 JSON 數(shù)據(jù) 319
17.2 使用工具生成代碼 319
17.2.1 使用 json_serializable 生成代碼 319
17.2.2 了解 json_serializable 的更多功能 321
17.3 小結(jié) 324
第 18章 編寫測試代碼 325
18.1 準(zhǔn)備工作 325
18.1.1 添加依賴 325
18.1.2 創(chuàng)建測試文件 326
18.2 單元測試 326
18.2.1 編寫測試代碼 326
18.2.2 使用 Mockito 模擬測試環(huán)境 327
18.2.3 運行單元測試 329
18.3 Widget 測試 330
18.3.1 編寫測試代碼 330
18.3.2 運行 Widget 測試 332
18.4 集成測試 332
18.4.1 添加集成測試的依賴 333
18.4.2 創(chuàng)建集成測試文件 333
18.4.3 啟動被集成應(yīng)用 334
18.4.4 編寫集成測試代碼 334
18.4.5 記錄性能數(shù)據(jù) 335
18.4.6 運行集成測試 336
18.5 小結(jié) 336
第 19章 性能優(yōu)化 337
19.1 性能優(yōu)化建議 337
19.1.1 控制 build 方法耗時 337
19.1.2 控制特效耗時 338
19.1.3 長列表優(yōu)化 338
19.1.4 避免跳幀 338
19.2 性能分析 339
19.2.1 通過 profile 模式做性能分析 339
19.2.2 發(fā)現(xiàn)問題 340
19.2.3 GPU 耗時分析 342
19.2.4 UI 耗時分析 343
19.2.5 Widget 重建分析 343
19.2.6 建立指標(biāo) 344
19.3 小結(jié) 344
第 20章 Flutter 的歷程與未來 345
20.1 回顧 Flutter 的歷程 345
20.2 展望 Flutter 的未來 346
20.3 Flutter for Web 347
20.3.1 簡述 347
20.3.2 構(gòu)建環(huán)境 348
20.3.3 使用 Web 運行待辦事項應(yīng)用 348
20.3.4 初窺 flutter-web 349
20.4 Flutter For Desktop 351
20.5 小結(jié) 352