本书将向你展示:通过使用变量和数据结构编写有效的Dart代码。通过探索小部件和数据处理构建Flutter应用程序。探索云提供商解决方案,并将其与Flutter集成。通过使用Google Cloud无服务器管理API来处理数据。使用Firebase解决方案,如身份验证和Cloud Firestore数据库。构建适用于移动和桌面平台的Web应用程序。
前言欢迎阅读本书。首先让我们来了解一下Flutter,这是一种多平台开发框架,正在迅速席卷开发社区。Dart 是Flutter 的基础,提供了一个功能丰富的软件开发工具包(SDK)。与学习多种技术不同,Flutter 让你能够用单一的代码库针对Android、iOS、Linux、Web 和Windows 进行开发。作为一个经常观看YouTube 的人,我总是对那些示例应用程序深感印象深刻。Flutter 和Dart 不仅让我重新热爱编程,还使我有机会结识一些了不起的Flutter 社区成员。Flutter 社区非常棒,不断提供高质量的内容。向那些在YouTube 和Google 开发者社区上投入时间和精力帮助人们进入软件行业的人们致敬。无论你是经验丰富的开发人员,还是刚开始入门的新手,Flutter 都会让开发变得有趣。它学习起来非常快速而且功能强大,可以与Firebase 等强大的基于云的解决方案进行集成。立即开始,让我们构建一个面向下一百万用户的应用程序吧。谁该阅读本书无论你是否了解Flutter 和Dart,都可能听到过那令人难以抗拒的呼唤,想要着手构建一些东西。不要让拖延的欲望左右你,现在就开始建设未来。那么,你如何保持动力,并达到能够交付一个应用程序的状态呢?不妨读读这本书。学习Flutter 和Dart 的美妙之处在于它们拥有非常低的学习门槛。开发应用程序需要技能和努力,软件工程师因此而获得高薪是有其道理的。无论你是否有多种语言的经验,或是零经验的软件开发者,Flutter 和Dart 都是创建令人惊艳应用程序的绝佳起点。从第一天开始,你就可以迅速提高工作效率,并以极少的努力制作出美观的应用程序。构建应用程序涉及许多组件的协同工作,以及与外部服务的集成。学习使用Firebase 套件的基础知识,是迈出云端的第一步。开始构建游戏,然后跟随本书了解Flame 游戏引擎的构建模块。写这本书的缘由我第一次接触Flutter 是因为我的妻子开始学习这门语言,她使用了谷歌提供的Flutter 开发课程。令我印象深刻的是应用程序的快速构建速度和精美外观。这种立即提升的生产力让我迅速沉迷于构建简单的多平台应用程序。在我刚开始学习这项新技术时,有一些事情并不明显,或者很难记住。我希望当时能有这本技术手册陪伴我一起学习课程。现在网络上有更多出色的在线课程可供选择,但一个问题仍然困扰着我:在Flutter 中如何实现某个功能?对于一些读者来说,本书将作为你在创建应用程序的旅程中现有知识的补充。对于其他人来说,它将成为你作为Flutter 开发者的旅程中的安全保障,指导和支持你前进。本书概览对于任何一门语言的初学者来说,开始时常常会面临很多不确定的情况,不知道从何处入手,需要掌握哪些知识。虽然我希望你能从头到尾地阅读本书,但实际上你很可能会直接跳转到Flutter 的章节。为此,本书采用了广泛的分类,以便你能够根据需要深入了解相关主题。以下是本书的大致结构:? 第1 ~ 2 章为你提供了Dart 语言的高级介绍,帮助你掌握变量和控制流等基础知识。? 第3 ~ 6 章快速深入介绍了Dart 语言的基本要素,帮助你能够熟练运用这门语言。? 第7 ~ 14 章涵盖了Flutter 语言,并演示了如何在屏幕上渲染小部件的基础知识。如果我猜得没错,这一部分将是你在开发需要创建小部件和管理数据的应用程序时最常参考的内容。? 第15 ~ 16 章介绍了云端开发,特别是使用Firebase 添加身份验证、数据库和托管功能。? 第17 章介绍了如何使用Flame 游戏引擎,并为你提供了使用该引擎的基本要点。如果你有一个空闲的周末,你可以使用它来重新创建游戏Frogger。? 附录部分涵盖了你需要了解的设置环境的内容,例如安装Flutter 框架、使用Flutter Doctor 检查工具以及在集成开发环境中的操作方法等。排版约定本书使用以下排版约定:斜体(Italic)表示新术语、URL、示例电子邮件地址、文件名和扩展名。等宽字体(Constant Width)表示程序片段,以及正文中出现的变量、函数名、数据库、数据类型、环境变量、语句和关键字等。加粗等宽字体(constant width bold)表示应该由用户输入的命令或其他文本。等宽斜体(constant width italic)表示应该由用户输入的值或根据上下文确定的值替换的文本。OReilly 在线学习平台(OReilly Online Learning)近40 年来,OReilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。公司独有的专家和改革创新者网络通过OReilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。OReilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自OReilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。联系我们任何有关本书的意见或疑问,请按照以下地址联系出版社。美国:OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)奥莱利技术咨询(北京)有限公司我们为本书设有一个网页,其中列出勘误表、示例和任何额外信息。你可以访问该网页:https://oreil.ly/fl-dt-ckbk。对本书的评论或技术性问题,请发电子邮件至:errata@oreilly.com.cn。如欲了解OReilly 图书、培训课程、会议和新闻的更多信息,请访问网站http://www.oreilly.com。我们的 Facebook:http://facebook.com/oreilly。我们的Twitter:http://twitter.com/oreillymedia。我们的YouTube:http://www.youtube.com/oreillymedia。致谢这个版本特别献给我可爱的妻子,是她激励我学习Flutter,其目的只是为了让我修复她的应用程序。感谢我的家人,尽管我忙于写这本书,但他们总是抽出时间大声地演奏音乐,或者在我专心工作时突然过来聊天。但说真的,感谢Dawn、Bailey、Elliot、Noah 和Amelia。一年的时间里,撰写这本书已经超越了一个项目,成了一种灵感来源。特别感谢Dylan Peck、Casey Palowitch、Alessandro Palmieri 和Andrew Brogdon 的支持和给予我将Flutter 带给Google Developer Group 社区的机会。正是这样的行动产生了差异,从我个人的经历来看,我知道这些活动真的备受赞赏。我还要感谢技术审阅者Alex Moore、Rob Edwards 和Majid Hajian,他们提供了很多宝贵的见解和反馈意见。写书虽然不容易,但有人愿意抽出他们的闲暇时间并帮助完成这样的工作真的非常有帮助。非常感谢你们每个人所付出的努力和时间。我要衷心感谢Jeff Bleiel,作为一名出色的编辑,他使这个过程非常愉快,明显比应有的压力要小得多。同时也感谢OReilly 的Zan McQuade 和Jonathon Owen。
Richard Rose是一名Google Cloud实验室架构师,专注于平台工程、Kubernetes和无服务器技术。他还是《Hands-On Serverless Computing with Google Cloud》一书的作者。
目录
前言 1
第1 章 学习Dart 变量 7
1.1 运行Dart 应用程序 8
1.2 使用整数值 .9
1.3 使用双精度值(Double)的操作 . 11
1.4 使用布尔值(Boolean)的操作 11
1.5 使用字符串(String) 12
1.6 输出信息到控制台 13
1.7 添加一个常量变量(编译时) 15
1.8 添加一个常量变量(运行时) 16
1.9 使用空变量 16
第2 章 深入理解控制流程 .19
2.1 验证条件是否满足 19
2.2 在满足条件之前迭代 21
2.3 迭代一系列项 .23
2.4 基于值执行条件动作 25
2.5 使用枚举器表示数值 26
2.6 实现异常处理 .28
第3 章 实现函数 31
3.1 声明函数31
3.2 向函数添加参数 32
3.3 使用可选参数 .33
3.4 从函数中返回值 35
3.5 声明匿名函数 .36
3.6 使用Future 添加函数延迟 38
第4 章 处理列表和映射表 .41
4.1 创建数据列表 .42
4.2 修改列表数据 .43
4.3 使用复杂类型的列表 44
4.4 处理映射表的键/ 值对 46
4.5 打印映射表数据结构的内容 48
4.6 验证映射表中是否存在内容 49
4.7 打印复杂数据类型 50
第5 章 开始使用面向对象的Dart 53
5.1 开始使用面向对象的Dart 54
5.2 创建一个类 55
5.3 使用构造函数初始化类 .56
5.4 添加类的继承 .58
5.5 添加类接口 61
5.6 添加Mixin 聚合类 64
第6 章 Dart 测试用例 .67
6.1 将Dart 测试包添加到应用程序中 68
6.2 创建示例测试应用程序 .70
6.3 在Dart 应用程序中运行单元测试 71
6.4 分组多个单元测试 74
6.5 为测试添加模拟数据 77
第7 章 Flutter 框架基础 .81
7.1 模拟应用程序接口 82
7.2 创建一个基础模板的Flutter 项目 83
7.3 去除Flutter 调试横幅 .85
7.4 了解小部件 87
7.5 深入理解小部件树 88
7.6 提高小部件渲染性能 89
第8 章 添加资源文件 91
8.1 使用pubspec.yaml 文件.92
8.2 添加资源文件夹 94
8.3 引用图像95
8.4 添加Google Fonts 包 97
8.5 导入包 98
第9 章 使用小部件 101
9.1 在Flutter 中创建无状态小部件 102
9.2 在Flutter 中创建有状态小部件 103
9.3 重构Flutter 小部件 107
9.4 使用Scaffold 类 . 111
9.5 添加一个AppBar 标题栏 114
9.6 使用容器构建 117
9.7 使用Center 小部件 120
9.8 使用SizedBox 小部件 .122
9.9 使用Column 小部件 .125
9.10 使用Row 小部件 . 129
9.11 使用Expanded 小部件 132
第10 章 开发用户界面 . 137
10.1 使用Google Fonts 包 . 138
10.2 结合RichText 139
10.3 识别宿主平台 141
10.4 使用Placeholder Widget 144
10.5 使用LayoutBuilder .146
10.6 使用MediaQuery 访问屏幕尺寸 150
第11 章 组织屏幕数据 . 155
11.1 实现垂直ListView 156
11.2 实现水平ListView 159
11.3 添加一个SliverAppBar. 162
11.4 添加SliverList 165
11.5 添加一个项目的GridView 170
11.6 添加SnackBar(弹出通知) . 172
第12 章 Flutter 页面导航 177
12.1 使用路由添加页面导航(命令式) 178
12.2 使用路由添加页面导航(声明式) 182
12.3 实现导航抽屉 186
12.4 使用选项卡 . 191
12.5 添加底部导航栏 195
12.6 使用Key 传递信息 . 198
第13 章 处理数据资源 . 201
13.1 战略性地访问数据 202
13.2 重构数据 204
13.3 从JSON 生成Dart 类 206
13.4 异步使用本地JSON 数据 209
13.5 从资产文件夹中使用JSON 数据集 214
13.6 访问远程JSON 数据 .218
第14 章 测试Flutter 用户界面 . 221
14.1 Flutter 中的自动化小部件测试 .222
14.2 进行自动化小部件测试 224
14.3 使用Flutter Driver 进行集成测试 225
14.4 测试Android/iOS 设备兼容性 227
第15 章 让Firebase、Flutter 一起工作 231
15.1 在Flutter 中使用Firebase 平台 232
15.2 设置Firebase 项目 233
15.3 初始化用于本地开发的Firebase SDK 235
15.4 配置Firebase 仿真器 .238
15.5 在开发环境中添加flutterfire_cli .240
15.6 集成Firestore 数据库 243
15.7 向Firestore 数据库写入数据 .246
15.8 从Cloud Firestore 中读取数据 .251
15.9 将Firebase 身份验证添加到Flutter 256
15.10 使用Firebase Hosting 托管Flutter Web 应用程序 262
第16 章 介绍云服务 . 265
16.1 开始使用云服务提供商 266
16.2 使用身份和访问管理 . 266
16.3 使用云存储托管对象 . 268
16.4 使用Dart 开发后端HTTP 服务器 270
16.5 构建Dart 容器 271
16.6 介绍Dart 的Serverless .273
第17 章 开始游戏开发 . 277
17.1 将Flame 包添加到Flutter 中 . 278
17.2 创建Flame 脚手架 279
17.3 添加精灵图 . 281
17.4 向精灵图添加手动水平移动 283
17.5 添加精灵图的自动垂直移动 286
17.6 添加碰撞检测 290
17.7 添加文本渲染 294
17.8 添加图形基元 298
17.9 添加音效 304
附录 设置你的开发环境 313