內容簡介
本書採用實踐為主,理論為輔,二者相結合的方式,闡述了
Dart程式語言的基礎和高級用法,以及Flutter 框架的開發。圖文並茂,通俗易懂。從最基礎的程式語言語法開始,逐步實現從0到1,開發出一款App的目標。無論是想要入門跨平台開發的朋友,還是有一定編程基礎的開發者,都能從本書獲益。為讀者帶來充滿輕鬆與喜樂的學習體驗。
圖書目錄
目 錄
第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.3 類型判定運算符 47
3.5.6 位操作運算符 50
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.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.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