本書從一個(gè)Android原生開發(fā)者的角度去認(rèn)識(shí)和了解Flutter,本書作者以幽默生動(dòng)的故事描寫手法,記錄在Flutter學(xué)習(xí)中所遇見的景色,并呈現(xiàn)給讀者,主要內(nèi)容包括:Flutter的安裝與基本概念,Dart語法、組件與容器、布局基礎(chǔ)、動(dòng)畫與手勢(shì)、自定義組件、資源與路由、Flutter框架、Flutter與Redux、Flutter與iOS、插件開發(fā)、綜合案例等。
前言
Day 1 初識(shí)Flutter與技能儲(chǔ)備1
1.1 Flutter初始項(xiàng)目分析1
1.1.1 Flutter初始項(xiàng)目結(jié)構(gòu)1
1.1.2 入口文件及MyApp分析2
1.1.3 MyHomePage與_MyHomePageState分析5
1.1.4 pubspec.yaml文件6
1.2 基本Debug技能7
1.2.1 斷點(diǎn)和放行7
1.2.2 變量查詢和喚醒程序8
1.2.3 Debug要點(diǎn)補(bǔ)充9
1.3 輔助技能儲(chǔ)備10
1.3.1 三個(gè)實(shí)用工具10
1.3.2 片段代碼和快速重構(gòu)12
1.3.3 三個(gè)基礎(chǔ)知識(shí)QA14
1.4 Widget知識(shí)儲(chǔ)備15
1.4.1 命令式UI編程與聲明式UI編程16
1.4.2 認(rèn)識(shí)Widget體系16
1.4.3 Widget源碼初識(shí)18
1.4.4 組件的提取抽離21
Day 2 Dart實(shí)用語法速覽23
2.1 基礎(chǔ)語法23
2.1.1 常用的數(shù)據(jù)類型23
2.1.2 變量與常量26
2.1.3 函數(shù)的使用27
2.2 通過Size類看Dart中的面向?qū)ο?0
2.3 其他語法點(diǎn)34
2.3.1 常用符號(hào)與關(guān)鍵字34
2.3.2 庫的使用和可見性35
2.3.3 泛型36
2.3.4 異步37
2.3.5 異常處理38
Day 3 界面風(fēng)格和簡單繪制39
3.1 Material風(fēng)格40
3.1.1 Scaffold和BottomNavigationBar40
3.1.2 TabBar和TabBarView41
3.1.3 標(biāo)題欄按鈕和菜單組件42
3.1.4 彈出對(duì)話框43
3.1.5 界面的左右滑頁43
3.1.6 showSnackBar和showBottomSheet44
3.2 Cupertino風(fēng)格45
3.2.1 CupertinoPageScaffold和CupertinoTabScaffold46
3.2.2 CupertinoNavigationBar和CupertinoTabBar46
3.2.3 CupertinoTabView47
3.2.4 CupertinoAlertDialog和showCupertinoModalPopup47
3.3 認(rèn)識(shí)CustomPainter繪制49
3.3.1 繪制網(wǎng)格49
3.3.2 Canvas初級(jí)繪制50
3.3.3 移植繪制n角星52
3.3.4 移植繪制粒子數(shù)字54
Day 4 基礎(chǔ)Widget56
4.1 Text組件56
4.1.1 Text的基本使用56
4.1.2 Text的陰影和裝飾線57
4.1.3 文字方向、對(duì)齊和溢出處理58
4.1.4 RichText的使用59
4.1.5 RichText與Text.rich60
4.2 Image組件60
4.2.1 Image資源的加載61
4.2.2 圖片的適應(yīng)模式62
4.2.3 圖片顏色及混合模式63
4.2.4 圖片對(duì)齊模式及重復(fù)模式63
4.2.5 用centerSlice實(shí)現(xiàn)圖片局部放大64
4.3 Container的使用65
4.3.1 Container的基本使用65
4.3.2 Padding的使用66
4.3.3 Container的邊線裝飾66
4.3.4 Container的約束和變換67
4.3.5 Container與布局的淵源68
4.4 常用多子布局71
4.4.1 圖解Flex布局71
4.4.2 Stack布局75
4.4.3 Wrap包裹布局76
Day 5 列表與滑動(dòng)79
5.1 組件封裝79
5.1.1 靜態(tài)布局79
5.1.2 頭像組件封裝80
5.1.3 條目組件封裝81
5.1.4 封裝聊天信息組件82
5.2 ListView的使用84
5.2.1 基本用法85
5.2.2 ListView的構(gòu)造及分隔線85
5.2.3 ListView的不同樣式87
5.2.4 ListView的上拉與下拉87
5.3 常用滑動(dòng)組件90
5.3.1 單子滑動(dòng)組件SingleChildScrollView90
5.3.2 滑動(dòng)控制器ScrollController92
5.3.3 滑頁組件PageView94
5.3.4 網(wǎng)格組件GridView97
5.4 Sliver家族99
5.4.1 SliverAppBar的使用100
5.4.2 Sliver中的列表布局、網(wǎng)格布局及普通布局101
5.4.3 吸頂效果SliverPersistentHeader103
Day 6 動(dòng)畫與路由106
6.1 動(dòng)畫閑談106
6.1.1 FPS106
6.1.2 動(dòng)畫控制器AnimationController107
6.1.3 運(yùn)動(dòng)盒108
6.2 Flutter動(dòng)畫詳解111
6.2.1 Animation和Animatable111
6.2.2 動(dòng)畫狀態(tài)監(jiān)聽和Animation方法116
6.2.3 動(dòng)畫簡化和封裝117
6.2.4 封裝強(qiáng)化版FlutterContainer118
6.3 路由與導(dǎo)航122
6.3.1 打開路由122
6.3.2 路由的傳參125
6.3.3 路由的跳轉(zhuǎn)動(dòng)畫128
6.3.4 Hero跳轉(zhuǎn)動(dòng)畫130
Day 7 手勢(shì)組件與自定義組件132
7.1 手勢(shì)組件與使用132
7.1.1 InkWell水波紋的使用132
7.1.2 GestureDetector的使用133
7.1.3 手寫板的實(shí)現(xiàn)135
7.2 根據(jù)現(xiàn)有組件實(shí)現(xiàn)自定義組件137
7.2.1 切換Widget組件137
7.2.2 顏色選擇圓鈕組件ColorChooser139
7.2.3 函數(shù)運(yùn)動(dòng)組件MathRunner142
7.3 繪制自定義組件143
7.3.1 能力分析組件AbilityWidget143
7.3.2 圖片放大組件BiggerView147
7.3.3 波紋線RhythmView150
Day 8 Flutter渲染機(jī)制153
8.1 認(rèn)識(shí)三棵樹153
8.1.1 漫談Widget、Element、RenderObject154
8.1.2 認(rèn)識(shí)RenderObject和Element156
8.1.3 三棵樹結(jié)構(gòu)158
8.1.4 三個(gè)根結(jié)點(diǎn)的初始化159
8.2 Element的裝配162
8.2.1 RenderObjectToWidget-Element的裝配162
8.2.2 StatelessElement和StatefulElement的裝配164
8.2.3 多子元素掛載166
8.3 State類全解析168
8.3.1 State的生命周期回調(diào)169
8.3.2 State切換和跳轉(zhuǎn)時(shí)生命周期測試173
8.3.3 setState做了什么175
Day 9 異步與資源178
9.1 認(rèn)識(shí)異步與流178
9.1.1 Dart中的異步任務(wù)178
9.1.2 Dart中的流181
9.2 文件中的異步與流184
9.2.1 文件的簡單操作184
9.2.2 文件讀寫的異步操作186
9.2.3 文件讀寫的流操作188
9.2.4 使用文件打造圖標(biāo)轉(zhuǎn)換工具190
9.3 網(wǎng)絡(luò)請(qǐng)求與json解析193
9.3.1 使用GitHub開放API 測試網(wǎng)絡(luò)訪問193
9.3.2 json解析197
9.3.3 異步方法的基本使用199
Day 10 數(shù)據(jù)共享與狀態(tài)管理202
10.1 數(shù)據(jù)共享和參數(shù)傳遞202
10.1.1 數(shù)據(jù)共享的傳統(tǒng)實(shí)現(xiàn)方式202
10.1.2 用InheritedWidget實(shí)現(xiàn)數(shù)據(jù)共享204
10.2 狀態(tài)管理的原始處理過程207
10.2.1 數(shù)據(jù)準(zhǔn)備與界面說明207
10.2.2 FutureBuilder與StreamBuilder的使用209
10.3 使用插件進(jìn)行狀態(tài)管理213
10.3.1 BLoC對(duì)數(shù)據(jù)狀態(tài)的管理213
10.3.2 Provider對(duì)數(shù)據(jù)狀態(tài)的管理219
10.3.3 Redux對(duì)數(shù)據(jù)狀態(tài)的管理225
Day 11 數(shù)據(jù)持久化和讀取230
11.1 Flutter中的數(shù)據(jù)庫存儲(chǔ)230
11.1.1 數(shù)據(jù)庫的初始化231
11.1.2 使用sqflite進(jìn)行增刪改查234
11.1.3 數(shù)據(jù)庫數(shù)據(jù)與UI界面的對(duì)接237
11.2 表單與數(shù)據(jù)持久化240
11.2.1 表單注冊(cè)頁240
11.2.2 持久化json數(shù)據(jù)和讀取241
11.2.3 持久化XML數(shù)據(jù)和讀取243
Day 12 插件及混合開發(fā)245
12.1 Flutter和平臺(tái)間的通信方式246
12.1.1 Flutter/Dart端246
12.1.2 Android/Kotlin端247
12.1.3 用toast連接兩個(gè)世界248
12.1.4 Flutter向平臺(tái)傳參250
12.1.5 插件的使用和上傳253
12.2 Flutter常見插件的使用255
12.2.1 路徑插件和權(quán)限插件255
12.2.2 音頻播放插件audioplayer257
12.2.3 視頻播放插件video_player259
12.2.4 圖片拾取器image_picker261
12.2.5 通過webview_flutter使用已有Web頁面262
12.3 Flutter的混合開發(fā)264
12.3.1 Flutter和Android混合開發(fā)264
12.3.2 Flutter和iOS混合開發(fā)269
12.3.3 讓Android視圖加入Flutter271