本書主要講述Flutter框架的核心技術(shù)。本書共12章,首先介紹了Flutter技術(shù)的基礎(chǔ)知識、Dart的基礎(chǔ)知識以及Flutter中的基礎(chǔ)組件等,然后講述了Flutter中的布局管理、動畫管理、手勢事件管理、路由管理以及狀態(tài)管理等核心技術(shù)點,最后討論了Flutter中的網(wǎng)絡(luò)通信和應(yīng)用測試并給出了一個完整的案例。本書有助于讀者深入理解Flutter 技術(shù)的完整知識體系。
本書適合Web前端開發(fā)人員、Android開發(fā)人員、iOS開發(fā)人員、Flutter初學(xué)者以及對移動開發(fā)感興趣的人員閱讀,也可供相關(guān)專業(yè)人士參考。
1.作為當(dāng)前最熱門的跨平臺開發(fā)框架之一,F(xiàn)lutter的優(yōu)勢在于非常高的開發(fā)效率和跨平臺的一致性。
2.本書從Flutter開發(fā)的各個方面入手,不僅講解了Flutter的基本使用方法,還分析了Flutter的設(shè)計思想和核心理念。
3.本書涵蓋Flutter框架的方方面面,從入門的基礎(chǔ)知識、前端開發(fā)的利器到前端開發(fā)實戰(zhàn)。
4.本書能夠幫助更多的開發(fā)者實現(xiàn)從初級到高級的進(jìn)階,建立起完整的Flutter知識體系,對于初次接觸Flutter的開發(fā)者是很好的入門指南。
5.提供配套源代碼。
本書從Flutter開發(fā)的各個方面入手,不僅講解了Flutter的基本使用方法,還分析了Flutter的設(shè)計思想和核心理念。通過閱讀本書,開發(fā)者不但能知其然,還知能其所以然,從而建立起完整的Flutter知識體系。本書可以幫助更多的開發(fā)者實現(xiàn)從初級到高級的進(jìn)階,希望讀者都能從本書中受益。
楊加康,移動開發(fā)工程師,目前就職于小米,在Android開發(fā)與前端開發(fā)方面具有豐富的理論基礎(chǔ)與實踐經(jīng)驗,精通Android系統(tǒng)的體系結(jié)構(gòu)和應(yīng)用層的開發(fā)。他從2018年開始投身Flutter領(lǐng)域,是國內(nèi)較早使用Flutter與Dart的開發(fā)人員。在個人博客與相關(guān)技術(shù)社區(qū)發(fā)表過多篇高質(zhì)量文章并獲得較高的關(guān)注量,翻譯過《物聯(lián)網(wǎng)項目實戰(zhàn):基于Android Things系統(tǒng)》。個人的微信公眾號是“MeandNi”(其中不定期分享Android、Flutter、Java等方面的文章/視頻)。
第1章 認(rèn)識Flutter 1
1.1 移動開發(fā)簡史 1
1.2 Flutter的架構(gòu) 3
1.3 Flutter家族 4
1.3.1 Dart 5
1.3.2 Material Design 6
1.3.3 Fuchsia 7
1.3.4 Flutter Web 7
1.4 第一個應(yīng)用—計數(shù)器 8
1.4.1 創(chuàng)建第一個應(yīng)用 8
1.4.2 Flutter項目的結(jié)構(gòu) 9
1.4.3 計數(shù)器應(yīng)用的實現(xiàn) 10
1.5 原理淺析—3棵重要的樹 14
1.6 組件渲染過程簡述 16
1.7 小結(jié)與心得 18
第2章 Dart入門 19
2.1 “Hello, Dart”程序 19
2.2 重要概念 21
2.2.1 變量和常量 21
2.2.2 數(shù)據(jù)類型 23
2.2.3 運算符 28
2.2.4 流程控制 30
2.2.5 函數(shù) 34
2.2.6 注釋 37
2.3 面向?qū)ο缶幊獭?8
2.3.1 類 38
2.3.2 類方法 39
2.3.3 靜態(tài)變量與方法 40
2.3.4 繼承 41
2.3.5 抽象類 43
2.3.6 構(gòu)造函數(shù) 43
2.3.7 枚舉類 47
2.4 小結(jié)與心得 48
第3章 一切皆為組件 49
3.1 有狀態(tài)組件與無狀態(tài)組件以及
相關(guān)函數(shù) 49
3.1.1 有狀態(tài)組件和無狀態(tài)組件 49
3.1.2 setState()函數(shù) 52
3.1.3 initState()函數(shù) 53
3.1.4 dispose()函數(shù) 53
3.1.5 build()函數(shù) 54
3.2 內(nèi)置的無狀態(tài)組件 54
3.2.1 Text組件 55
3.2.2 Image組件 58
3.2.3 Icon組件 59
3.2.4 Button組件 60
3.3 內(nèi)置的有狀態(tài)組件 62
3.3.1 TextField組件 62
3.3.2 Form組件 66
3.3.3 Switch組件、Checkbox組件和
Radio組件 69
3.4 常用容器組件 73
3.4.1 Container組件 74
3.4.2 Padding組件和Align組件 76
3.5 可滾動組件 77
3.5.1 ListView組件 78
3.5.2 GridView組件 80
3.6 結(jié)構(gòu)化組件 82
3.6.1 Scaffold組件 82
3.6.2 AppBar組件與Drawer組件 86
3.7 根組件—WidgetsApp 93
3.8 元素樹 94
3.8.1 不變的組件 94
3.8.2 可變的元素 96
3.8.3 組件的Key對象 97
3.9 小結(jié)與心得 101
第4章 布局管理 102
4.1 布局約束 102
4.1.1 盒子協(xié)議 103
4.1.2 滑動協(xié)議 104
4.2 RenderObject樹 105
4.3 布局約束實踐 106
4.3.1 單個子組件的布局 106
4.3.2 多個子組件的布局 107
4.3.3 可滾動的布局 112
4.4 內(nèi)置布局組件 120
4.4.1 線性布局組件 120
4.4.2 Stack布局組件 124
4.4.3 Expanded布局組件 126
4.4.4 Table布局組件 127
4.5 小結(jié)與心得 129
第5章 Dart進(jìn)階 130
5.1 混入 130
5.2 異步編程 133
5.2.1 事件循環(huán) 134
5.2.2 微任務(wù)隊列 135
5.2.3 事件隊列 135
5.2.4 異步函數(shù) 138
5.3 泛型 140
5.3.1 限制類型 140
5.3.2 泛型方法 141
5.4 小結(jié)與心得 141
第6章 動畫管理 142
6.1 動畫的4個要素 142
6.1.1 插值器 142
6.1.2 曲線模型 143
6.1.3 TickerProvider 144
6.1.4 Animation類 144
6.2 動畫組件 149
6.2.1 內(nèi)置動畫組件 149
6.2.2 AnimatedWidget 151
6.2.3 AnimatedBuilder 153
6.3 隱式動畫組件 154
6.3.1 AnimatedContainer組件 155
6.3.2 AnimatedOpacity組件 157
6.3.3 自定義隱式動畫組件 158
6.3.4 TweenAnimationBuilder 160
6.4 小結(jié)與心得 161
第7章 手勢事件管理與畫布 163
7.1 手勢事件 163
7.1.1 手勢探測器 163
7.1.2 拖曳手勢 165
7.1.3 縮放手勢 169
7.2 手勢探測器 170
7.2.1 手勢消歧 171
7.2.2 使用手勢識別器 172
7.3 指針事件 174
7.4 自定義畫布 176
7.4.1 CustomPaint和CustomPainter 176
7.4.2 Canvas對象 178
7.4.3 Path對象 179
7.5 實戰(zhàn):結(jié)合畫布與手勢實現(xiàn)交互式
畫布 180
7.6 實戰(zhàn):畫布與動畫的結(jié)合 183
7.7 小結(jié)與心得 186
第8章 路由管理 187
8.1 路由 188
8.1.1 組件路由 188
8.1.2 命名路由 190
8.1.3 彈出路由 193
8.2 路由!194
8.2.1 棧頂替換 194
8.2.2 棧頂清除 195
8.2.3 嵌套路由 197
8.3 路由動畫 201
8.4 路由數(shù)據(jù) 203
8.4.1 數(shù)據(jù)傳遞 203
8.4.2 數(shù)據(jù)返回 205
8.5 路由監(jiān)聽器 206
8.6 彈窗路由 208
8.7 小結(jié)與心得 211
第9章 狀態(tài)管理 212
9.1 初探狀態(tài) 212
9.2 統(tǒng)一管理—InheritedWidget 214
9.2.1 數(shù)據(jù)倉庫 215
9.2.2 子組件注冊 218
9.2.3 狀態(tài)更新 220
9.2.4 ScopeModel 221
9.3 局部更新—BLoC 223
9.3.1 流 223
9.3.2 實現(xiàn)BLoC 225
9.3.3 提供BLoC實例 229
9.4 化繁為簡—provider庫 232
9.5 小結(jié)與心得 235
第10章 數(shù)據(jù)存儲與通信 236
10.1 數(shù)據(jù)持久化 236
10.1.1 讀寫文件 237
10.1.2 存儲鍵值對 241
10.1.3 數(shù)據(jù)庫 242
10.2 網(wǎng)絡(luò)通信 249
10.2.1 http庫 250
10.2.2 JSON 252
10.3 小結(jié)與心得 258
第11章 應(yīng)用測試 259
11.1 單元測試 259
11.2 模擬請求 262
11.3 組件測試 264
11.3.1 查找組件 266
11.3.2 模擬用戶與組件的交互 267
11.4 驅(qū)動測試 270
11.4.1 列表滾動 274
11.4.2 性能跟蹤 274
11.5 小結(jié)與心得 277
第12章 完整案例 278
12.1 應(yīng)用數(shù)據(jù) 279
12.2 主題樣式 280
12.3 路由管理 284
12.4 狀態(tài)管理方案 285
12.5 登錄頁面 289
12.6 商城首頁 294
12.6.1 商城首頁的幕布組件 298
12.6.2 商城首頁的菜單組件 305
12.6.3 商城首頁的商品展示 307
12.6.4 商城首頁的購物車 309
12.7 搜索頁面 316
12.8 結(jié)束語 321
附錄A 搭建Flutter開發(fā)環(huán)境 322
附錄B 安裝Dart SDK 332
附錄C Pub包管理器 335