本書(shū)采用實(shí)踐為主,理論為輔,二者相結(jié)合的方式,闡述了Dart編程語(yǔ)言的基礎(chǔ)和高級(jí)用法,以及Flutter 框架的開(kāi)發(fā)。圖文并茂,通俗易懂。從最基礎(chǔ)的編程語(yǔ)言語(yǔ)法開(kāi)始,逐步實(shí)現(xiàn)從0到1,開(kāi)發(fā)出一款A(yù)pp的目標(biāo)。無(wú)論是想要入門(mén)跨平臺(tái)開(kāi)發(fā)的朋友,還是有一定編程基礎(chǔ)的開(kāi)發(fā)者,都能從本書(shū)獲益。為讀者帶來(lái)充滿輕松與喜樂(lè)的學(xué)習(xí)體驗(yàn)。
蕭文翰,Android架構(gòu)師/技術(shù)顧問(wèn)。從2013年開(kāi)始從事移動(dòng)前端開(kāi)發(fā)工作,主攻Android和跨平臺(tái)開(kāi)發(fā)技術(shù),具有豐富的實(shí)戰(zhàn)項(xiàng)目經(jīng)驗(yàn)。蕭文翰是國(guó)內(nèi)7項(xiàng)專利的共同發(fā)明人,從2017年年底至2019年年底,在擔(dān)任天津/廣州三星通信研究院代碼優(yōu)化工程師期間,6次當(dāng)選Best Technical-Report,曾推動(dòng)App性能優(yōu)化活動(dòng),實(shí)現(xiàn)性能類別解決方案同比增長(zhǎng)60%,總體解決方案領(lǐng)先于全球研究院。他還是CSDN博客專家&認(rèn)證講師、知乎專欄作家。
目 錄
第1章 Flutter簡(jiǎn)介 1
1.1 移動(dòng)App開(kāi)發(fā)的前世今生 2
1.2 為什么選擇Flutter 3
1.2.1 Flutter的優(yōu)勢(shì) 3
1.2.2 Flutter強(qiáng)大的跨平臺(tái)特性 4
1.2.3 Flutter的明天 5
1.3 Flutter的體系結(jié)構(gòu) 6
第2章 初次遇見(jiàn)Flutter 8
2.1 開(kāi)發(fā)環(huán)境搭建 8
2.1.1 下載JDK 9
2.1.2 安裝JDK 9
2.1.3 安裝和配置Xcode 10
2.1.4 下載Flutter SDK 11
2.1.5 配置Flutter SDK 11
2.1.6 配置必備組件 12
2.2 集成開(kāi)發(fā)環(huán)境的選擇 12
2.2.1 配置Android Studio 13
2.2.2 配置Visual Studio Code 17
2.3 第一個(gè)程序——Hello World 18
2.3.1 運(yùn)行自診斷腳本 18
2.3.2 啟動(dòng)Android模擬器 19
2.3.3 將項(xiàng)目運(yùn)行在模擬器上 21
2.3.4 探索Flutter熱修復(fù)特性 22
2.4 升級(jí)Flutter 23
2.5 練習(xí) 24
第3章 Dart語(yǔ)言基礎(chǔ) 25
3.1 Dart語(yǔ)言簡(jiǎn)介 25
3.1.1 Dart發(fā)展史 25
3.1.2 Dart重要概念 26
3.1.3 Hello Dart 27
3.2 變量與常量 29
3.2.1 變量 29
3.2.2 常量 30
3.3 基本數(shù)據(jù)類型 31
3.3.1 數(shù)值型 31
3.3.2 字符串 32
3.3.3 布爾 34
3.3.4 集合 34
3.3.5 UTF-32編碼表示法 39
3.4 方法 39
3.4.1 定義一個(gè)方法 39
3.4.2 參數(shù) 40
3.4.3 主方法 42
3.4.4 作用域 42
3.4.5 閉包 42
3.4.6 檢查兩個(gè)方法是否相等 43
3.4.7 返回值 43
3.5 運(yùn)算符 43
3.5.1 算術(shù)運(yùn)算符 45
3.5.2 關(guān)系運(yùn)算符 46
3.5.3 類型判定運(yùn)算符 47
3.5.4 賦值運(yùn)算符 48
3.5.5 邏輯運(yùn)算符 49
3.5.6 位操作運(yùn)算符 50
3.5.7 條件表達(dá)式 51
3.5.8 級(jí)聯(lián)運(yùn)算符 52
3.5.9 其他運(yùn)算符 52
3.6 流程控制 52
3.6.1 if-else條件語(yǔ)句 53
3.6.2 for循環(huán) 53
3.6.3 while循環(huán)和do-while循環(huán) 54
3.6.4 break語(yǔ)句和continue語(yǔ)句 55
3.6.5 switch-case條件語(yǔ)句 56
3.6.6 斷言 58
3.7 異常 59
3.7.1 Throw 59
3.7.2 Catch 60
3.7.3 Finally 62
3.8 練習(xí) 62
第4章 Dart語(yǔ)言的面向?qū)ο髴?yīng)用 63
4.1 類 63
4.1.1 類的實(shí)例化 63
4.1.2 實(shí)例變量 65
4.1.3 getter()方法和setter()方法 66
4.1.4 靜態(tài)變量 67
4.1.5 構(gòu)造方法 67
4.1.6 實(shí)例方法 73
4.1.7 靜態(tài)方法 73
4.1.8 擴(kuò)展類 74
4.1.9 可復(fù)寫(xiě)的運(yùn)算符 77
4.1.10 抽象方法 78
4.1.11 抽象類 80
4.1.12 接口 80
4.1.13 利用Mixin特性擴(kuò)展類 82
4.1.14 枚舉 83
4.2 泛型 84
4.2.1 泛型的作用 84
4.2.2 泛型的使用示例 85
4.2.3 限制泛型類型范圍 85
4.2.4 使用泛型方法 86
4.3 練習(xí) 87
第5章 Dart語(yǔ)言的高級(jí)使用技巧 88
5.1 庫(kù) 88
5.1.1 使用庫(kù) 89
5.1.2 創(chuàng)建庫(kù) 91
5.2 異步處理 91
5.2.1 聲明異步的方法 92
5.2.2 使用await表達(dá)式 93
5.2.3 異步在循環(huán)中的使用 93
5.3 可調(diào)用的類 93
5.4 Dart的isolates運(yùn)行模式 94
5.5 方法類型定義 94
5.6 元數(shù)據(jù) 96
5.7 注釋 96
5.7.1 單行注釋 96
5.7.2 多行注釋 97
5.7.3 文檔注釋 97
5.8 編寫(xiě)更有效的Dart代碼 97
5.9 練習(xí) 98
第6章 繪制賞心悅目的界面 99
6.1 第一個(gè)Flutter項(xiàng)目 99
6.1.1 Flutter項(xiàng)目的結(jié)構(gòu) 100
6.1.2 日志工具的使用 100
6.2 Flutter基礎(chǔ) 101
6.2.1 Flutter框架結(jié)構(gòu) 101
6.2.2 App啟動(dòng)入口 101
6.2.3 一切皆為組件 102
6.2.4 組件的組合運(yùn)用 102
6.2.5 何為狀態(tài) 103
6.2.6 自定義組件 114
6.3 基本組件 120
6.3.1 基本組件簡(jiǎn)介 120
6.3.2 文本組件 120
6.3.3 按鈕組件 124
6.3.4 圖片組件 126
6.3.5 開(kāi)關(guān)和復(fù)選框組件 129
6.3.6 單選框組件 130
6.3.7 輸入框組件和表單組件 131
6.4 多元素布局組件 147
6.4.1 布局類組件 147
6.4.2 線性布局 149
6.4.3 堆疊布局 152
6.4.4 彈性布局 155
6.4.5 流式布局 156
6.5 容器類組件 159
6.5.1 內(nèi)邊距 159
6.5.2 約束 160
6.5.3 裝飾 161
6.5.4 變換 164
6.5.5 容器 165
6.6 滾動(dòng)列表組件 166
6.6.1 滾動(dòng)列表組件簡(jiǎn)介 166
6.6.2 單個(gè)子組件的滾動(dòng)視圖 166
6.6.3 線性列表組件 168
6.6.4 網(wǎng)格列表組件 174
6.6.5 自定義滾動(dòng)組件 177
6.6.6 滾動(dòng)的控制及實(shí)時(shí)狀態(tài)監(jiān)聽(tīng) 178
6.7 其他重要的組件 181
6.7.1 攔截返回鍵 181
6.7.2 在組件樹(shù)之間共享數(shù)據(jù) 183
6.7.3 觸摸事件監(jiān)聽(tīng) 186
6.7.4 手勢(shì)識(shí)別 188
6.7.5 通知組件 190
6.7.6 全局事件廣播 193
6.8 App資源管理 196
6.8.1 放置資源 196
6.8.2 使用資源 197
6.8.3 跨平臺(tái)使用共享資源 197
6.9 動(dòng)畫(huà) 200
6.9.1 基本概念 200
6.9.2 補(bǔ)間動(dòng)畫(huà) 200
6.9.3 物理模擬動(dòng)畫(huà) 202
6.9.4 非線性動(dòng)畫(huà) 202
6.9.5 共享元素過(guò)渡動(dòng)畫(huà) 203
6.9.6 多個(gè)動(dòng)畫(huà)的疊加 206
6.10 字體 210
6.10.1 放置字體 210
6.10.2 使用字體 211
6.11 主題 211
6.11.1 使用主題 211
6.11.2 全局主題 212
6.11.3 局部主題 212
6.11.4 擴(kuò)展現(xiàn)有主題 213
6.12 練習(xí) 213
第7章 數(shù)據(jù)的傳遞和持久化保存 214
7.1 頁(yè)面跳轉(zhuǎn) 214
7.1.1 頁(yè)面的跳轉(zhuǎn)和返回 214
7.1.2 數(shù)據(jù)的傳遞和返回 216
7.2 本地文件 221
7.2.1 本地文件的路徑 222
7.2.2 本地文件的讀寫(xiě) 222
7.3 網(wǎng)絡(luò)請(qǐng)求 225
7.3.1 發(fā)起HTTP請(qǐng)求 226
7.3.2 Json解析 228
7.4 保存用戶設(shè)置 239
7.5 數(shù)據(jù)庫(kù)操作 240
7.6 練習(xí) 248
第8章 使用設(shè)備硬件實(shí)現(xiàn)更多功能 249
8.1 GPS定位技術(shù) 249
8.2 相機(jī) 252
8.3 藍(lán)牙 254
8.4 音視頻 259
8.4.1 音頻錄放 259
8.4.2 視頻錄放 262
8.5 距離傳感器 263
8.6 NFC近場(chǎng)通信 265
8.7 練習(xí) 269
第9章 使App更加通用——國(guó)際化的實(shí)現(xiàn) 270
9.1 識(shí)別當(dāng)前系統(tǒng)的首選語(yǔ)言 270
9.2 使App支持多語(yǔ)言環(huán)境 272
9.3 練習(xí) 276
第10章 與原生代碼交互 277
10.1 平臺(tái)通道 277
10.1.1 平臺(tái)通道的概念 278
10.1.2 平臺(tái)通道支持的數(shù)據(jù)類型和解碼器 278
10.2 與Android原生代碼交互 279
10.2.1 使用Java語(yǔ)言實(shí)現(xiàn) 283
10.2.2 使用Kotlin語(yǔ)言實(shí)現(xiàn) 285
10.3 與iOS原生代碼交互 287
10.3.1 使用Objective-C語(yǔ)言實(shí)現(xiàn) 287
10.3.2 使用Swift語(yǔ)言實(shí)現(xiàn) 289
10.4 練習(xí) 290
第11章 Material Design(Android)風(fēng)格設(shè)計(jì) 291
11.1 腳手架組件 291
11.2 頂部程序欄組件 294
11.3 水平選項(xiàng)卡與內(nèi)容視圖組件 296
11.4 底部導(dǎo)航欄組件 298
11.5 抽屜組件 300
11.6 浮動(dòng)懸停按鈕組件 302
11.7 扁平按鈕組件 303
11.8 圖標(biāo)按鈕組件 303
11.9 浮動(dòng)動(dòng)作按鈕組件 305
11.10 彈出式菜單組件 305
11.11 滑塊組件 307
11.12 日期時(shí)間選擇組件 309
11.13 簡(jiǎn)單對(duì)話框 312
11.14 提示框 314
11.15 可展開(kāi)的列表組件 315
11.16 底部提示組件 317
11.17 標(biāo)簽組件 318
11.18 幫助提示組件 320
11.19 卡片組件 320
11.20 水平和圓形進(jìn)度組件 322
11.21 練習(xí) 323
第12章 Cupertino(iOS)風(fēng)格設(shè)計(jì) 324
12.1 腳手架組件 324
12.2 頂部導(dǎo)航欄組件 326
12.3 底部導(dǎo)航欄組件 329
12.4 操作表單組件 332
12.5 動(dòng)作指示器組件 335
12.6 提示框組件 336
12.7 按鈕組件 338
12.8 時(shí)間日期選擇組件 340
12.9 時(shí)間選擇組件 341
12.10 選擇器組件 342
12.11 滑塊組件 344
12.12 練習(xí) 345
第13章 實(shí)戰(zhàn)演練:頭條新聞 346
13.1 功能需求和技術(shù)可行性分析 346
13.1.1 功能需求分析 347
13.1.2 技術(shù)可行性分析 347
13.2 繪制產(chǎn)品原型圖 349
13.3 將代碼托管到Git 350
13.3.1 注冊(cè)GitHub賬號(hào) 351
13.3.2 新建代碼倉(cāng)庫(kù) 351
13.3.3 代碼倉(cāng)庫(kù)的克隆 353
13.3.4 代碼的提交 354
13.4 數(shù)據(jù)的獲取和解析 355
13.4.1 HTTP請(qǐng)求和返回處理 355
13.4.2 Json解析 356
13.4.3 定義新聞?lì)l道列表 358
13.5 繪制界面 359
13.5.1 構(gòu)建和繪制新聞標(biāo)題列表 359
13.5.2 跳轉(zhuǎn)查看新聞詳情 363
13.6 進(jìn)一步:還可以做些什么 370
第14章 測(cè)試與調(diào)試應(yīng)用 371
14.1 測(cè)試概述 371
14.2 單元測(cè)試 372
14.2.1 添加測(cè)試庫(kù) 372
14.2.2 創(chuàng)建測(cè)試類和被測(cè)試類 372
14.2.3 開(kāi)發(fā)業(yè)務(wù)邏輯 373
14.2.4 開(kāi)發(fā)測(cè)試類 373
14.2.5 運(yùn)行測(cè)試類 374
14.3 組件測(cè)試 374
14.3.1 添加測(cè)試庫(kù) 374
14.3.2 創(chuàng)建要被測(cè)試的組件 375
14.3.3 創(chuàng)建組件測(cè)試類 375
14.3.4 使用WidgetTester創(chuàng)建組件 375
14.3.5 使用find查找組件 375
14.3.6 使用Matcher驗(yàn)證結(jié)果 376
14.4 集成測(cè)試 377
14.4.1 創(chuàng)建要測(cè)試的App 378
14.4.2 添加必要的測(cè)試庫(kù) 379
14.4.3 創(chuàng)建測(cè)試類 380
14.4.4 構(gòu)建指令化的Flutter應(yīng)用程序類 380
14.4.5 構(gòu)建集成測(cè)試用到的類 381
14.4.6 運(yùn)行測(cè)試 382
14.5 Dart分析器 382
14.6 Dart單步調(diào)試法 383
14.7 調(diào)試應(yīng)用程序的層 386
14.7.1 組件層 386
14.7.2 渲染層 389
14.7.3 轉(zhuǎn)儲(chǔ)層級(jí)關(guān)系 391
14.7.4 語(yǔ)義調(diào)試 395
14.7.5 調(diào)試調(diào)度 398
14.8 可視化調(diào)試 399
14.9 調(diào)試動(dòng)畫(huà) 400
14.10 性能優(yōu)化 400
14.10.1 啟動(dòng)時(shí)間分析 401
14.10.2 代碼執(zhí)行時(shí)間分析 401
14.11 使用性能圖表 402
14.12 Material基線網(wǎng)格 403
14.13 使用組件檢查器 404
第15章 發(fā)布應(yīng)用 406
15.1 Android平臺(tái) 406
15.1.1 自定義App圖標(biāo) 406
15.1.2 簽名 407
15.1.3 代碼混淆 408
15.1.4 檢查AndroidManifest.xml 409
15.1.5 復(fù)查App兼容性配置 409
15.1.6 編譯用于發(fā)布的Apk 410
15.1.7 將Apk發(fā)布到應(yīng)用市場(chǎng) 410
15.2 iOS平臺(tái) 410
15.2.1 在iTunes Connect上注冊(cè) 411
15.2.2 復(fù)查XCode項(xiàng)目屬性 411
15.2.3 自定義App圖標(biāo) 412
15.2.4 構(gòu)建發(fā)布版本 413
15.2.5 在TestFlight上分發(fā)App 413
15.2.6 將App發(fā)布到App Store 413