Flutter入门经典pdf下载pdf下载

Flutter入门经典百度网盘pdf下载

作者:
简介:本篇主要提供Flutter入门经典pdf下载
出版社:清华大学出版社
出版时间:2020-12
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

产品特色

内容简介

主要内容

● 阐释Flutter的细节,包括开发者可用的所有框架、Widget和工具。

● 即使你是没有经验的开发新手,也可跨越式前进,在移动软件领域大显身手。

● 分享Flutter提供的各种快捷的现代方法,使用热重载、富有表现力的灵活UI、快速流畅的动画进行开发。

● 揭示加快开发应用的诀窍:将用于跨平台应用的所有代码保持在单个代码库中。

● 本书示例丰富,呈现解决常见问题的多种妙招。


作者简介

Marco L. Napoli是Pixolini有限公司的CEO,也是一位经验丰富的移动端、Web和桌面端应用开发者。他在可视化开发优雅美观且易于使用的系统方面已得到了业内的广泛认可。早在2008年他就编写了自己的s个原生iOS应用。www.pixolini.com上展示了其工作成果和已发布的应用。

Marco儿时就迷恋上了计算机。他的父亲注意到了这一点并给他买了一台PC(个人计算机),从那时起他就开始开发软件了。他曾就读于迈阿密大学攻读建筑学学位,但当时他就已经开始经营自己的商业业务了,并在四年后他认定建筑学并不适合自己。他为各种各样的行业开发过系统,其中包括银行业、医疗保健行业、房地产行业、教育行业、货运业、娱乐业等。不久之后,一家业内领先的银行业软件公司收购了他的MLN Enterprises公司。MLN Enterprises公司的主要产品是抵押贷款银行业务软件、运算处理业务软件以及市场营销软件。

接下来,他开启了咨询顾问的生涯,并在不久后创建了IdeaBlocks有限公司。该公司的主营业务是软件开发咨询,曾经为一个销售酒店服务软件的客户开发了移动端、桌面端和Web平台,主要产品包括酒店营销软件、餐饮软件、网络空间软件、客户服务软件以及维护软件;这些产品通过云服务器使用Microsoft SQL Server和应用于敏感数据的加密处理进行数据同步。其客户端的用户包括凯悦嘉轩&嘉寓酒店、希尔顿酒店、假日酒店、希尔顿欢朋酒店、万豪酒店、贝斯特韦斯特酒店、丽笙酒店、喜来登酒店、豪生酒店、希尔顿合博套房酒店等。在该公司的合同都完成后,他就关闭了IdeaBlocks。

如今,他将重心放在Pixolini的运营上。Pixolini开发了用于iOS、macOS、Android、Windows以及Web的移动端、桌面端和Web应用。他同时也在Udemy在线教育网站上授课,主要讲解如何使用他开发的一款Web应用来分析房地产投资。他已经开发并在各大应用商店中发布了十几款应用。

“离开了意大利的特浓咖啡卡布奇诺,我就无法写代码了,并且我热爱中国武术。”

Marco和妻子Carla共同养育了三个出色的孩子。


目录

目 录


第 I 部分 Flutter编程基础

第1章 Flutter入门 3

1.1 Flutter简介 4

1.2 理解Widget生命周期事件 5

1.2.1 StatelessWidget生命周期 5

1.2.2 StatefulWidget生命周期 6

1.3 理解Widget树和Element树 8

1.3.1 StatelessWidget和Element树 9

1.3.2 StatefulWidget和Element树 10

1.4 安装Flutter SDK 13

1.4.1 在macOS上进行安装 13

1.4.2 在Windows上进行安装 15

1.4.3 在Linux上进行安装 17

1.5 配置Android Studio编辑器 19

1.6 本章小结 20

1.7 本章知识点回顾 20

第2章 创建一个Hello World应用 23

2.1 设置项目 23

2.2 使用热重载 27

2.3 使用主题将应用样式化 30

2.3.1 使用全局应用主题 30

2.3.2 将主题用于应用的局部 32

2.4 理解StatelessWidget和StatefulWidget 34

2.5 使用外部包 36

2.5.1 搜索包 36

2.5.2 使用包 37

2.6 本章小结 38

2.7 本章知识点回顾 38

第3章 学习Dart基础知识 39

3.1 为何使用Dart? 39

3.2 代码注释 40

3.3 运行main()入口点 41

3.4 变量引用 41

3.5 变量声明 42

3.5.1 数字 43

3.5.2 String 43

3.5.3 Boolean 43

3.5.4 List 44

3.5.5 Map 44

3.5.6 Runes 45

3.6 使用运算符 45

3.7 使用流程语句 47

3.7.1 if和else 47

3.7.2 三元运算符 48

3.7.3 for循环 48

3.7.4 while和do-while 49

3.7.5 while和break 50

3.7.6 continue 50

3.7.7 switch和case 51

3.8 使用函数 52

3.9 导入包 53

3.10 使用类 54

3.10.1 类继承 57

3.10.2 类混合 57

3.11 实现异步编程 58

3.12 本章小结 59

3.13 本章知识点回顾 60


第4章 创建一个初学者项目模板 61

4.1 创建和组织文件夹与文件 61

4.2 结构化Widget 64

4.3 本章小结 69

4.4 本章知识点回顾 70

第5章 理解Widget树 71

5.1 Widget介绍 71

5.2 构建完整的Widget树 73

5.3 构建浅层Widget树 80

5.3.1 使用常量进行重构 80

5.3.2 使用方法进行重构 81

5.3.3 使用Widget类进行重构 87

5.4 本章小结 95

5.5 本章知识点回顾 95


第 II 部分 充当媒介的Flutter:具象化一个应用

第6章 使用常用Widget 99

6.1 使用基础Widget 99

6.1.1 SafeArea 103

6.1.2 Container 104

6.1.3 Text 108

6.1.4 RichText 109

6.1.5 Column 111

6.1.6 Row 112

6.1.7 Button 117

6.2 使用图片和图标 129

6.2.1 AssetBundle 129

6.2.2 Image 129

6.2.3 Icon 131

6.3 使用装饰 134

6.4 使用Form Widget验证文本框 139

6.5 检查设备方向 143

6.6 本章小结 150

6.7 本章知识点回顾 150

第7章 为应用添加动画效果 151

7.1 使用AnimatedContainer 151

7.2 使用AnimatedCrossFade 155

7.3 使用AnimatedOpacity 160

7.4 使用AnimationController 164

7.5 本章小结 175

7.6 本章知识点回顾 176

第8章 创建应用的导航 177

8.1 使用Navigator 178

8.2 使用Hero(飞行)动画 189

8.3 使用BottomNavigationBar 194

8.4 使用BottomAppBar 201

8.5 使用TabBar和TabBarView 205

8.6 使用Drawer和ListView 211

8.7 本章小结 221

8.8 本章知识点回顾 222

第9章 创建滚动列表和效果 223

9.1 使用Card 223

9.2 使用ListView和ListTile 225

9.3 使用GridView 232

9.3.1 使用GridView.count 234

9.3.2 使用GridView.extent 235

9.3.3 使用GridView.builder 236

9.4 使用Stack 240

9.5 使用Sliver(薄片)自定义CustomScrollView 247

9.6 本章小结 256

9.7 本章知识点回顾 256

第10章 构建布局 257

10.1 布局的概要视图 257

10.1.1 天气区域布局 259

10.1.2 标签布局 259

10.1.3 页脚图片布局 260

10.1.4 最终布局 260

10.2 创建布局 261

10.3 本章小结 269

10.4 本章知识点回顾 269

第11章 应用交互性 271

11.1 设置GestureDetector:基本处理 271

11.2 实现Draggable和DragTarget Widget 278

11.3 使用GestureDetector检测移动和缩放 282

11.4 使用InkWell和InkResponse手势 293

11.5 使用Dismissible Widget 299

11.6 本章小结 306

11.7 本章知识点回顾 307

第12章 编写平台原生代码 309

12.1 理解平台通道 309

12.2 实现客户端平台通道应用 310

12.3 实现iOS主机端平台通道 315

12.4 实现Android主机端平台通道 319

12.5 本章小结 323

12.6 本章知识点回顾 324


第 III 部分 创建可用于生产环境的应用

第13章 使用本地持久化保存数据 327

13.1 理解JSON格式 328

13.2 使用数据库类来写入、读取和序列化JSON 330

13.3 格式化日期 331

13.4 对日期列表进行排序 332

13.5 使用FutureBuilder检索数据 333

13.6 构建日记应用 335

13.6.1 添加日记数据库类 339

13.6.2 添加日记条目页 345

13.6.3 完成日记主页面 362

13.7 本章小结 377

13.8 本章知识点回顾 378

第14章 添加Firebase和Firestore后端 381

14.1 Firebase和Cloud Firestore是什么? 382

14.1.1 对Cloud Firestore进行结构化和数据建模 383

14.1.2 查看Firebase身份验证能力 385

14.1.3 查看Cloud Firestore安全规则 387

14.2 配置Firebase项目 388

14.3 添加一个Cloud Firestore数据库并实现安全规则 395

14.4 构建客户端日记应用 398

14.4.1 将身份验证和Cloud Firestore包添加到客户端应用 399

14.4.2 为客户端应用添加基础布局 405

14.4.3 为客户端应用添加类 409

14.5 本章小结 412

14.6 本章知识点回顾 413

第15章 为Firestore客户端应用添加状态管理 415

15.1 实现状态管理 416

15.1.1 实现一个抽象类 417

15.1.2 实现InheritedWidget 419

15.1.3 实现模型类 420

15.1.4 实现服务类 421

15.1.5 实现BLoC模式 422

15.1.6 实现StreamController、Stream、Sink和StreamBuilder 423

15.2 构建状态管理 425

15.2.1 添加Journal模型类 427

15.2.2 添加服务类 428

15.2.3 添加Validators类 435

15.2.4 添加BLoC模式 436

15.3 本章小结 455

15.4 本章知识点回顾 455

第16章 为Firestore客户端应用页面添加BLoC 457

16.1 添加登录页 458

16.2 修改主页面 464

16.3 修改主页 468

16.4 添加编辑日记页面 476

16.5 本章小结 489

16.6 本章知识点回顾 490


前言/序言

前 言


Flutter最初是在2015年的Dart开发者大会上以Sky这个名称公开发布的。Eric Seidel(Google的Flutter工程总监)在那次大会的演讲中首先讲到,他参会的目的是介绍Sky。Sky是一个实验项目,被称为“移动端上的Dart”。Eric已经在Android Play Store上构建并且发布了一个演示应用,在开始介绍该演示应用之前,他表示没有使用任何Java代码来绘制这个应用,这意味着它是原生应用。Eric展示的第一个特性是旋转的正方形。Dart以60Hz的频率驱动该设备,这也是该系统的首要目标:快速且灵敏响应(Eric曾希望能够更快运行,如120Hz,但他当时所使用的设备的能力限制了这一点)。Eric继续展示了多点触控、快速滚动以及其他特性。Sky提供了最佳的移动体验(对于用户和开发人员来说都是这样);开发人员在Web开发方面遇到过不少难处,他们认为应该可以做得更好。用户界面(UI)以及业务逻辑都是以Dart编写的,其目标就在于实现平台中立。

很快到了2019年,Flutter强有力地驱动包括Google Home Hub在内的Google智能显示平台,并且是通往使用Chrome OS来支持桌面应用的第一步。目前的结果就是,Flutter支持运行在macOS、Windows以及Linux上的桌面应用。Flutter被描述为一个可移植UI框架,它可将一套代码用于所有界面,如移动端、Web、桌面和嵌入式设备。

《Flutter入门经典》将讲解如何使用Flutter框架以及Dart编程语言,通过一套代码来开发用于iOS和Android的移动应用。随着Flutter拓展到移动端之外的其他领域,我们能利用《Flutter入门经典》中讲解的知识来进行针对其他平台的开发。《Flutter入门经典》读者不需要具备编程经验;《Flutter入门经典》会从基础知识讲起,并且逐步推进到开发可用于生产环境的应用程序。

《Flutter入门经典》将以简单朴实的风格讲解每一个概念。读者可以遵循“试一试”的实战练习来实践所学知识并创建出针对特定特性的应用。

每一章内容都是基于之前章节的内容来编写,并会增加一些新概念以便帮助读者了解如何构建美观、具有动画特效且功能丰富的应用。阅读完《Flutter入门经典》后,读者将能利用所学知识和技术来开发自己的应用。《Flutter入门经典》的最后四章会创建一个日记应用以便在本地保存数据,还会创建另一个日记应用,其中要使用状态管理、身份验证,以及包括离线同步在内的多设备数据云端同步能力来跟踪用户的心情变化,这些功能对于现今的移动应用而言都是必需的。《Flutter入门经典》竭尽所能地使用了一种友好且通俗的方法来讲解技术,以便读者能够在阅读《Flutter入门经典》的过程中学习到工作中所需的基础知识和高级概念。

在我首次观看到Google所展示的Flutter后,就深深地迷恋上它。尤其吸引我的一点是,Flutter的一切都是以Widget为基础的。我们可以利用Widget并且将它们嵌套(组合)在一起来创建所需的UI;而且最好的一点是,我们可以轻易地创建自己的自定义Widget。另外一点比较吸引我的地方在于,Flutter能使用一套代码开发出面向iOS和Android的应用;这是我长期以来一直渴求的特性,但在Flutter出现之前我都没有找到一种绝佳的解决方案。Flutter是声明式的,是一种现代响应式框架,其中Widget可根据其当前状态来处理UI所应具备的外观。

我对于使用Flutter和Dart进行开发的热情持续增长,因而我决定撰写这本书来与读者分享我的经验和专业知识。我深信《Flutter入门经典》对于初学者和有经验的开发人员都是有用的,能让大家掌握相关的工具和知识以便进行应用构建并且发展成为一名多平台开发人员。《Flutter入门经典》内容中包含许多提示、见解、假设场景、图表、截图、示例代码和练习。可扫描封底二维码下载源代码。

《Flutter入门经典》读者对象

所有希望学习如何使用Flutter和Dart来开发移动端、多平台应用的人都可以阅读《Flutter入门经典》。对于希望学习如何开发现代、具备快速原生性能的响应式iOS和Android移动应用的无经验初学者而言,《Flutter入门经典》非常适合阅读。此外,《Flutter入门经典》也可以让毫无经验的初学者学习到开发可用于生产环境的应用所需的高级概念。《Flutter入门经典》也适合具备编程经验的、希望学习Flutter框架和Dart语言的读者阅读。

《Flutter入门经典》假设读者不具备任何编程、Flutter或Dart经验。如果读者已经具有其他语言的编程经验或者熟悉Flutter与Dart,那么通过阅读《Flutter入门经典》将更深入地理解每个概念和每种技术。

《Flutter入门经典》内容要点

前面几章会介绍和讲解Flutter框架的架构、Dart语言,以及创建新项目的步骤。读者将使用这些知识为《Flutter入门经典》中的每一个练习创建新项目。每一章的内容都会关注新概念,以便让读者学习新知识。同时希望这些章节内容能成为读者巩固掌握每个概念的参考资料。

从第2章开始,在读者学习每个概念和每种技术时,还可遵循“试一试”实战练习并且创建新的应用项目,以便学以致用。在继续阅读的过程中,每一章都会帮助读者学习更多高级主题。最后四章专注于创建两个可用于生产环境的应用,其中要应用前面几章所讲解的内容并会实现新的高级概念。

《Flutter入门经典》内容结构

《Flutter入门经典》分为三部分,共16章。虽然每一章都是基于前面所介绍的概念来组织编写的,但每一章都是独立的,读者可跳到某一感兴趣的章节进行阅读以便学习或进一步理解相关主题。

第I部分:Flutter编程基础

《Flutter入门经典》的第Ⅰ部分将让读者了解Flutter的核心知识,这样就能让读者打下构建Flutter应用的坚实基础。

第1章:Flutter入门——将讲述Flutter框架工作的背后原理以及使用Dart语言的好处。读者将了解Widget、Element以及RenderObject的相关性,并将理解它们如何组成Widget树、Element树以及渲染树。读者将了解StatelessWidget和StatefulWidget及其生命周期事件。该章还会介绍Flutter的声明特点,这意味着Flutter会构建UI来反映应用的状态。读者将学习如何在macOS、Windows或Linux上安装Flutter框架、Dart、编辑器和插件。

第2章:创建一个Hello World应用——将介绍如何创建首个Flutter项目,以便读者熟悉项目创建过程。通过编写一个最基础的示例,引导读者掌握应用的基础结构,了解如何在iOS和Android模拟器上运行应用,以及如何对代码进行变更。这个时候不必担心还不理解代码,后续章节将逐步引导读者掌握代码知识。

第3章:学习Dart基础知识——Dart是学习开发Flutter应用的基础,该章讲解Dart的基础结构。读者将学习如何对代码进行注释、main()函数如何启动应用、如何声明变量以及如何使用List来存储值数组。读者还将了解运算符,以及如何使用运算符来执行算术运算、相等性判断、逻辑运算、条件运算及级联标记。该章将介绍如何使用外部包和类,以及如何使用import语句。读者将了解如何使用Future对象来实现异步编程,还将了解如何创建各个类以便对代码逻辑进行分组并且使用变量来留存数据,以及如何定义执行逻辑的函数。

第4章:创建一个初学者项目模板——该章将介绍创建新项目的步骤,将使用和复制这些步骤来创建所有练习,还将介绍如何在项目中组织文件和文件夹。读者将根据所需的操作类型来创建最常用的名称以便分组Widget、类和文件。读者还将了解如何结构化Widget以及导入外部包和库。

第5章:理解Widget树——Widget树就是组合(嵌套)使用Widget以便创建简单与复杂布局的结果。随着开始嵌套Widget,代码会变得难以阅读,所以尝试尽可能保持Widget树的浅层化。该章将介绍所使用的Widget。读者将理解深度Widget树的影响,并将了解如何将其重构为浅层化Widget树,从而让代码更易于管理。该章将介绍创建浅层Widget树的三种方式,也就是分别使用常量、方法以及Widget类进行重构。读者将了解每种技术实现的优劣。

第II部分:充当媒介的Flutter:具象化一个应用

《Flutter入门经典》的第II部分内容比较棘手一些,需要读者动手实践,这一部分将逐步介绍如何添加创建绝佳用户体验的功能。

第6章:使用常用Widget——将学习如何使用最常用的Widget,它们都是用于创建美观UI以及良好用户体验(UX)的基础构造块。读者将了解如何从应用的资源包以及通过统一资源定位符借助Web来加载图片,还将了解如何使用配套的Material Components图标以及如何应用装饰器来增强Widget的外观体验或将它们用作录入字段的输入指引。该章将介绍如何使用Form Widget将文本字段录入Widget作为一个分组进行校验。还将介绍检测设备方向的不同方式,以便根据设备所处的纵向或横向模式来相应地布局Widget。

第7章:为应用添加动画效果——将了解如何为应用添加动画效果以便表达操作。在恰当使用动画效果时,将提升UX,但过多或不必要的动画效果也会造成糟糕的UX。该章将介绍如何创建Tween动画效果,还将介绍如何通过AnimatedContainer、AnimatedCrossFade和AnimatedOpacity Widget来使用内置的动画效果。读者将了解如何使用AnimationController和AnimatedBuilder类来创建自定义动画效果。还将了解如何使用多个Animation类来创建交错动画。该章将讲解如何使用CurvedAnimation类来实现非线性效果。

第8章:创建应用的导航——好的导航会创造极佳的UX,从而让信息访问更加简单。读者将了解到,在导航到另一个页面时添加动画效果也能提升UX,只要该效果能够表达一项操作,而不是造成困扰。该章将讲解如何使用Navigator Widget来管理一系列路由以便在页面之间移动,还将讲解如何使用Hero Widget来表达导航动画效果以便将Widget从一个页面移动和缩放到另一个页面。该章将介绍使用BottomNavigationBar、BottomAppBar、TabBar、TabBarView和Drawer Widget来添加导航的不同方法,还将介绍如何使用ListView Widget以及Drawer Widget来创建可导航菜单项列表。

第9章:创建滚动列表和效果——该章将介绍如何使用不同的Widget来创建滚动列表,以便帮助用户查看和选择信息,还将介绍如何使用Card Widget配合滚动列表Widget来分组信息。读者将学习如何使用ListView Widget来构建可滚动Widget的线性列表,还将学习如何使用GridView以网格形式展示可滚动Widget的磁贴块。读者将了解如何使用Stack Widget配合滚动列表来重叠、定位以及对齐子Widget。还将了解如何使用像SliverSafeArea、SliverAppBar、SliverList、SliverGrid等的Sliver Widget来实现CustomScrollView,以便创建像视差动画这样的自定义滚动效果。

第10章:构建布局——将学习如何嵌套Widget以便构建专业的布局。嵌套这一概念是创建优美布局的主要组成部分,它也被称为组合。基础和复杂布局都主要基于纵向或横向Widget,或者基于两者的组合。该章的目标是创建一个日记条目页面用于呈现详细信息,其中包括页眉图片、标题、日记详情、天气、地址、标签以及页脚图片。为了布局该页面,需要使用各种Widget,如SingleChildScrollView、SafeArea、Padding、Column、Row、Image、Divider、Text、Icon、SizedBox、Wrap、Chip以及CircleAvatar。

第11章:应用交互性——将学习如何使用手势为应用增加交互性。在移动应用中,手势是监听用户交互的核心,而充分利用手势则可为应用带来极佳的UX。不过,不能表达一项操作的手势的滥用也会造成糟糕的UX。读者将了解如何使用GestureDetector手势,如触碰、双击、长按、拖曳、垂直拖动、水平拖动以及缩放;还将了解如何使用Draggable Widget来拖动DragTarget Widget以便创建拖曳效果从而改变Widget的颜色。该章将介绍如何实现InkWell与InkResponse Widget以便响应触控以及可视化展示波纹动画效果,还会介绍如何通过拖曳来关闭Dismissible Widget。读者将学习如何使用Transform Widget和Matrix4类来缩放与移动Widget。

第12章:编写平台原生代码——某些情况下,需要访问特定的iOS或Android API功能。读者将学习如何使用平台通道在Flutter应用与主机平台之间发送和接收消息。该章将介绍如何使用MethodChannel从Flutter应用(客户端)发送消息,以及如何使用iOS的FlutterMethodChannel与Android的MethodChannel来接收调用(主机端)和发送回结果。

第III部分:创建可用于生产环境的应用

《Flutter入门经典》最后四章将介绍更高级的领域并且做好将示例应用发布到生产环境的准备。

第13章:使用本地持久化保存数据——该章将介绍如何构建一个日记应用。读者将了解如何使用JSON文件格式在应用启动运行时就开始持久化保存数据并将文件保存到本地iOS和Android文件系统。JavaScript对象表示法(JavaScript Object Notation,JSON)是一种通用开放标准以及独立于语言的文件数据格式,其好处在于可提供人类可读的文本。该章将讲解如何创建数据库类以便写入、读取和序列化JSON文件,还将讲解如何格式化列表以及根据日期对其进行排序。

在移动应用中,在处理过程中不阻塞UI是非常重要的。该章将介绍如何使用Future类以及FutureBuilder Widget,还将介绍如何呈现一个日期选择日历、校验用户录入数据以及在录入栏之间移动焦点。

读者还将学习如何使用Dismissible Widget通过在一个记录上拖动或释放来删除记录。为了根据日期对记录进行排序,该章将讲解如何使用List().sort方法以及Comparator函数。为了在页面之间进行导航,需要使用Navigator Widget,该章还将讲解如何使用CircularProgressIndicator Widget来展示运行中的操作。

第14章:添加Firebase和Firestore后端——该章和第15章及第16章将使用之前几章讲解的技术与一些新概念,并将它们结合起来使用以便创建一个可用于生产环境的记录心情的日记应用。在可用于生产环境的应用中,我们应该如何结合使用之前所学到的知识,从而通过仅重绘数据发生变更的Widget来提升性能、在页面之间和Widget树传递状态、处理用户身份验证凭据、在设备和云之间同步数据、创建用于处理移动应用和Web应用之间独立于平台的逻辑类呢?这些正是最后三章的重点所在,读者将学习如何应用之前所了解的技术以及新的重要概念和技术来开发可用于生产环境的移动应用。在这最后三章中,读者将学习如何实现应用范围内以及本地的状态管理,并通过实现业务逻辑组件(BLoC)模式来最大化平台代码共享。

该章将介绍如何使用身份验证并使用Google的Firebase后端服务器基础设施、Firebase Authentication和Cloud Firestore将数据持久化到云端数据库。读者将了解到,Cloud Firestore是一个NoSQL文档数据库,可使用移动端和Web应用的离线支持来存储、查询和同步数据。我们将能在多个设备之间同步数据。读者将学习如何设置和构建无服务应用。

第15章:为Firestore客户端应用添加状态管理——该章将继续编辑第14章中创建的记录心情的日记应用。该章将介绍如何创建应用范围内的以及本地的状态管理,其中要使用InheritedWidget类作为提供程序以便在Widget和页面之间管理与传递State。

该章将介绍如何使用BLoC模式来创建BLoC类,例如管理对于Firebase身份验证和Cloud Firestore数据库服务类的访问。该章还会介绍如何使用InheritedWidget类在BLoC和页面之间传递引用。还将介绍如何使用一种响应式方法,这是通过使用StreamBuilder、StreamController以及Stream来填充和刷新数据而实现的。

该章将讲解如何创建服务类来管理Firebase身份验证API以及Cloud Firestore数据库API。还要创建和利用抽象类来管理用户凭据。读者将学习如何创建一个数据模型类来处理Cloud Firestore QuerySnapshot到各个记录的映射问题。读者将了解如何创建一个类以便根据所选心情来管理心情图标列表、描述和图标旋转位置。读者还将使用intl包并学习如何创建一个日期格式化类。

第16章:为Firestore客户端应用页面添加BLoC——该章将继续编辑在第14章中创建的记录心情的日记应用以及在第15章中创建的附加功能。

该章将介绍如何将BLoC、服务、提供程序、模型和工具类应用到UI Widget页面。使用BLoC模式的好处在于,可将UI Widget和业务逻辑分开。该章将讲解如何使用依赖注入将服务类注入BLoC类中。通过使用依赖注入,BLoC仍将独立于平台。这一概念极其重要,因为Flutter框架正在从移动端扩展到Web、桌面和嵌入式设备。

读者将学习如何通过实现应用BLoC模式的类来执行应用范围内的身份验证状态管理。该章将介绍如何创建Login页面,其中要实现BLoC模式类以便验证电子邮箱、密码和用户凭据。还将介绍如何通过实现提供程序类(InheritedWidget)以便在页面和Widget树之间传递状态。读者将学习如何修改首页以便实现和创建BLoC模式类来处理登录凭据校验、创建日记条目列表以及添加和删除各个条目。还将学习如何创建日记编辑页面,它实现了BLoC模式类以便添加、修改和保存已有条目。

遵循《Flutter入门经典》进行练习的前提

读者需要安装Flutter框架和Dart以便创建示例项目。《Flutter入门经典》使用Android Studio作为主要开发工具,并且所有项目都是面向iOS和Android编译的。为编译iOS应用,读者需要一台安装了Xcode的Mac计算机。可使用其他编辑器,如Microsoft Visual Studio Code或IntelliJ IDEA。对于最后一个重要项目,读者需要创建一个免费的Google Firebase账户,以便利用云端身份验证和数据同步,其中包括离线支持。

内容格式约定

为了帮助读者能够充分理解内容文本,并且持续跟随《Flutter入门经典》的讲解步骤,《Flutter入门经典》使用了若干内容格式约定。

试一试

(1) 这些练习由一系列编号步骤构成。

(2) 读者可使用自己的数据库并遵循这些步骤进行处理。


示例说明

在每一个“试一试”的结尾处,都会详细阐释所输入的代码。

代码的呈现有两种不同方式:

(1) 大多数示例代码都显示为等宽字体,不加粗。

(2) 对于在上下文中特别重要的代码,或在以前的代码片段的基础上修改的代码,则显示为粗体。