目 录
第1章 Hello Flutter 1
1.1 技术需求 1
1.2 Dart语言的基础知识 2
1.2.1 Hello Dart 3
1.2.2 面积计算器 6
1.2.3 for循环和字符串 8
1.2.4 箭头语法和三元运算符 10
1.2.5 while循环、List和泛型 11
1.2.6 类和对象 15
1.2.7 使用getter和setter 16
1.2.8 构造函数 17
1.3 创建第一个Flutter应用程序 19
1.3.1 运行第一个Hello World应用程序 19
1.3.2 使用MaterialApp和Scaffold 23
1.3.3 格式化文本和使用Column 25
1.3.4 显示图像并使用按钮 26
1.3.5 显示AlertDialog对话框 28
1.3.6 使用内间距 31
1.3.7 使用SingleChildScrollView 33
1.4 本章小结 34
1.5 本章练习 34
1.6 进一步阅读 35
第2章 英里还是千米—使用有状态微件 37
2.1 技术需求 37
2.2 项目概述 38
2.3 理解状态和有状态微件 39
2.4 创建度量转换项目 39
2.4.1 使用有状态微件 40
2.4.2 从TextField读取用户输入 42
2.4.3 创建DropdownButton微件 44
2.4.4 更新DropdownButton微件 46
2.4.5 完成应用程序的UI 47
2.4.6 添加业务逻辑 52
2.5 本章小结 55
2.6 本章练习 56
2.7 进一步阅读 56
第3章 My Time—监听数据流 57
3.1 技术需求 58
3.2 构建计时器主页布局 58
3.3 在Flutter中使用流和异步编程 66
3.3.1 在主屏幕上显示时间—StreamBuilder 71
3.3.2 启动按钮 73
3.4 访问设置路由 75
3.5 构架Settings屏幕布局 80
3.5.1 使用GridView.Count()构造函数 80
3.5.2 向widgets.dart文件添加自定义SettingButton 81
3.6 使用shared_preferences读写应用程序数据 84
3.7 本章小结 92
3.8 本章练习 93
3.9 进一步阅读 93
第4章 Pong Game—2D动画和手势 95
4.1 技术需求 95
4.2 构建应用程序的UI 96
4.2.1 创建球体 97
4.2.2 创建球拍 98
4.2.3 创建网格布局 99
4.3 使用动画 102
4.4 添加游戏逻辑 105
4.5 使用GestureDetector 108
4.6 检查球拍位置 109
4.7 向游戏中添加随机性 111
4.8 添加分数并完成游戏 114
4.9 本章小结 117
4.10 本章练习 117
4.11 进一步阅读 118
第5章 从Web中获取数据 119
5.1 技术需求 119
5.2 项目概览 120
5.3 连接Web服务并利用HTTP检索数据 120
5.4 解析JSON数据并将其转换为模型对象 125
5.5 添加一个ListView以显示数据 130
5.6 显示详情页面并通过屏幕传递数据 133
5.7 添加搜索功能 136
5.8 本章小结 139
5.9 本章练习 140
5.10 进一步阅读 141
第6章 使用Sq(F)Lite并在本地数据库中存储数据 143
6.1 技术需求 143
6.2 基本理论和背景 144
6.3 项目概览 145
6.4 使用sqflite数据库 146
6.4.1 创建sqflite数据库 146
6.4.2 测试数据库 149
6.5 创建模型类 151
6.6 向用户显示数据库数据 156
6.6.1 插入和编辑数据 163
6.6.2 删除元素 168
6.6.3 完成Items屏幕功能 170
6.6.4 解决方案 171
6.7 本章小结 175
6.8 本章练习 176
6.9 进一步阅读 177
第7章 将Firebase集成至Flutter应用程序 179
7.1 技术需求 179
7.2 Firebase简介 180
7.3 项目概述 181
7.4 向Flutter应用程序中添加Firebase 181
7.4.1 创建一个Firestore数据库 184
7.4.2 将Firebase集成至Flutter应用程序的方法 187
7.4.3 EventDetail模型类 192
7.4.4 创建事件细节屏幕 194
7.5 向应用中添加身份验证 198
7.5.1 添加登录/注册页面 200
7.5.2 添加身份验证逻辑 204
7.5.3 引入Firebase规则 210
7.6 向Firebase中写入数据:添加喜欢的特性 210
7.7 本章小结 217
7.8 本章练习 218
7.9 进一步阅读 218
第8章 Treasure Mapp—集成地图并使用设备相机 221
8.1 技术需求 221
8.2 地理定位和相机:强强联手 222
8.3 将Google Maps集成至Flutter 222
8.3.1 利用Google Maps显示一幅地图 225
8.3.2 创建位置模型和帮助类 230
8.3.3 在地图上插入新位置 235
8.3.4 编辑和删除现有地址 239
8.4 使用设备相机 242
8.5 本章小结 250
8.6 本章练习 251
8.7 进一步阅读 251
第9章 Knockout—利用Flare创建动画 253
9.1 技术需求 253
9.2 项目概览 253
9.3 什么是Flare 254
9.4 利用Flare创建对象 255
9.5 利用Flare实现对象的动画效果 261
9.6 将Flare集成至Flutter应用中 268
9.6.1 创建Dice类 270
9.6.2 创建Single Dice屏幕 271
9.6.3 创建Knockout游戏 274
9.7 本章小结 282
9.8 本章练习 283
9.9 进一步阅读 284
第10章 ToDo应用程序—使用BLoC模式和Sembast 285
10.1 技术需求 285
10.2 项目概览 286
10.3 使用sembast存储数据 287
10.3.1 sembast:处理数据 288
10.3.2 打开sembast数据库 289
10.3.3 利用sembast创建CRUD方法 290
10.3.4 使用sembast 293
10.4 BLoC模式 295
10.4.1 使用BLoC模式 296
10.4.2 使用BLoC和流更新UI 300
10.4.3 HomePage屏幕用户界面 301
10.4.4 TodoScreen用户界面 304
10.5 本章小结 308
10.6 本章练习 309
10.7 进一步阅读 310
第11章 构建Flutter Web应用程序 311
11.1 技术需求 311
11.2 基础理论和上下文 312
11.3 项目概览 312
11.4 构建运行于浏览器上的Flutter应用程序 315
11.4.1 连接Google Books API服务 316
11.4.2 创建Book模型类 317
11.4.3 利用HTTP服务检索图书 319
11.5 创建响应式UI 321
11.5.1 响应式微件:ListView或Table 326
11.5.2 针对较大设备创建Table 326
11.5.3 针对较小设备创建ListView 330
11.6 使用shared_preferences保存数据 331
11.7 向Web服务器发布Flutter应用程序 337
11.8 本章小结 338
11.9 本章练习 339
11.10 进一步阅读 339
练习答案 341
附录A 353