本書采用實踐為主,理論為輔,二者相結合的方式,闡述了Dart編程語言的基礎和高級用法,以及Flutter 框架的開發。圖文并茂,通俗易懂。從最基礎的編程語言語法開始,逐步實現從0到1,開發出一款App的目標。無論是想要入門跨平臺開發的朋友,還是有一定編程基礎的開發者,都能從本書獲益。為讀者帶來充滿輕松與喜樂的學習體驗。
蕭文翰,Android架構師/技術顧問。從2013年開始從事移動前端開發工作,主攻Android和跨平臺開發技術,具有豐富的實戰項目經驗。蕭文翰是國內7項專利的共同發明人,從2017年年底至2019年年底,在擔任天津/廣州三星通信研究院代碼優化工程師期間,6次當選Best Technical-Report,曾推動App性能優化活動,實現性能類別解決方案同比增長60%,總體解決方案領先于全球研究院。他還是CSDN博客專家&認證講師、知乎專欄作家。
目 錄
第1章 Flutter簡介 1
1.1 移動App開發的前世今生 2
1.2 為什么選擇Flutter 3
1.2.1 Flutter的優勢 3
1.2.2 Flutter強大的跨平臺特性 4
1.2.3 Flutter的明天 5
1.3 Flutter的體系結構 6
第2章 初次遇見Flutter 8
2.1 開發環境搭建 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 集成開發環境的選擇 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發展史 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 基本數據類型 31
3.3.1 數值型 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 參數 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 算術運算符 45
3.5.2 關系運算符 46
3.5.3 類型判定運算符 47
3.5.4 賦值運算符 48
3.5.5 邏輯運算符 49
3.5.6 位操作運算符 50
3.5.7 條件表達式 51
3.5.8 級聯運算符 52
3.5.9 其他運算符 52
3.6 流程控制 52
3.6.1 if-else條件語句 53
3.6.2 for循環 53
3.6.3 while循環和do-while循環 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語言的面向對象應用 63
4.1 類 63
4.1.1 類的實例化 63
4.1.2 實例變量 65
4.1.3 getter()方法和setter()方法 66
4.1.4 靜態變量 67
4.1.5 構造方法 67
4.1.6 實例方法 73
4.1.7 靜態方法 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 創建庫 91
5.2 異步處理 91
5.2.1 聲明異步的方法 92
5.2.2 使用await表達式 93
5.2.3 異步在循環中的使用 93
5.3 可調用的類 93
5.4 Dart的isolates運行模式 94
5.5 方法類型定義 94
5.6 元數據 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項目的結構 100
6.1.2 日志工具的使用 100
6.2 Flutter基礎 101
6.2.1 Flutter框架結構 101
6.2.2 App啟動入口 101
6.2.3 一切皆為組件 102
6.2.4 組件的組合運用 102
6.2.5 何為狀態 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 開關和復選框組件 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 內邊距 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 網格列表組件 174
6.6.5 自定義滾動組件 177
6.6.6 滾動的控制及實時狀態監聽 178
6.7 其他重要的組件 181
6.7.1 攔截返回鍵 181
6.7.2 在組件樹之間共享數據 183
6.7.3 觸摸事件監聽 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 擴展現有主題 213
6.12 練習 213
第7章 數據的傳遞和持久化保存 214
7.1 頁面跳轉 214
7.1.1 頁面的跳轉和返回 214
7.1.2 數據的傳遞和返回 216
7.2 本地文件 221
7.2.1 本地文件的路徑 222
7.2.2 本地文件的讀寫 222
7.3 網絡請求 225
7.3.1 發起HTTP請求 226
7.3.2 Json解析 228
7.4 保存用戶設置 239
7.5 數據庫操作 240
7.6 練習 248
第8章 使用設備硬件實現更多功能 249
8.1 GPS定位技術 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更加通用——國際化的實現 270
9.1 識別當前系統的首選語言 270
9.2 使App支持多語言環境 272
9.3 練習 276
第10章 與原生代碼交互 277
10.1 平臺通道 277
10.1.1 平臺通道的概念 278
10.1.2 平臺通道支持的數據類型和解碼器 278
10.2 與Android原生代碼交互 279
10.2.1 使用Java語言實現 283
10.2.2 使用Kotlin語言實現 285
10.3 與iOS原生代碼交互 287
10.3.1 使用Objective-C語言實現 287
10.3.2 使用Swift語言實現 289
10.4 練習 290
第11章 Material Design(Android)風格設計 291
11.1 腳手架組件 291
11.2 頂部程序欄組件 294
11.3 水平選項卡與內容視圖組件 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章 實戰演練:頭條新聞 346
13.1 功能需求和技術可行性分析 346
13.1.1 功能需求分析 347
13.1.2 技術可行性分析 347
13.2 繪制產品原型圖 349
13.3 將代碼托管到Git 350
13.3.1 注冊GitHub賬號 351
13.3.2 新建代碼倉庫 351
13.3.3 代碼倉庫的克隆 353
13.3.4 代碼的提交 354
13.4 數據的獲取和解析 355
13.4.1 HTTP請求和返回處理 355
13.4.2 Json解析 356
13.4.3 定義新聞頻道列表 358
13.5 繪制界面 359
13.5.1 構建和繪制新聞標題列表 359
13.5.2 跳轉查看新聞詳情 363
13.6 進一步:還可以做些什么 370
第14章 測試與調試應用 371
14.1 測試概述 371
14.2 單元測試 372
14.2.1 添加測試庫 372
14.2.2 創建測試類和被測試類 372
14.2.3 開發業務邏輯 373
14.2.4 開發測試類 373
14.2.5 運行測試類 374
14.3 組件測試 374
14.3.1 添加測試庫 374
14.3.2 創建要被測試的組件 375
14.3.3 創建組件測試類 375
14.3.4 使用WidgetTester創建組件 375
14.3.5 使用find查找組件 375
14.3.6 使用Matcher驗證結果 376
14.4 集成測試 377
14.4.1 創建要測試的App 378
14.4.2 添加必要的測試庫 379
14.4.3 創建測試類 380
14.4.4 構建指令化的Flutter應用程序類 380
14.4.5 構建集成測試用到的類 381
14.4.6 運行測試 382
14.5 Dart分析器 382
14.6 Dart單步調試法 383
14.7 調試應用程序的層 386
14.7.1 組件層 386
14.7.2 渲染層 389
14.7.3 轉儲層級關系 391
14.7.4 語義調試 395
14.7.5 調試調度 398
14.8 可視化調試 399
14.9 調試動畫 400
14.10 性能優化 400
14.10.1 啟動時間分析 401
14.10.2 代碼執行時間分析 401
14.11 使用性能圖表 402
14.12 Material基線網格 403
14.13 使用組件檢查器 404
第15章 發布應用 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 編譯用于發布的Apk 410
15.1.7 將Apk發布到應用市場 410
15.2 iOS平臺 410
15.2.1 在iTunes Connect上注冊 411
15.2.2 復查XCode項目屬性 411
15.2.3 自定義App圖標 412
15.2.4 構建發布版本 413
15.2.5 在TestFlight上分發App 413
15.2.6 將App發布到App Store 413