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