【好书推荐】Flutter入门经典

作者简介

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

内容简介

书中阐释Flutter的细节,包括开发者可用的所有框架、Widget和工具。即使你是没有经验的开发新手,也可跨越式前进,在移动软件领域大显身手。文中分享Flutter提供的各种快捷的现代方法,使用热重载、富有表现力的灵活UI、快速流畅的动画进行开发。揭示加快开发应用的诀窍:将用于跨平台应用的所有代码保持在单个代码库中。本书示例丰富,呈现解决常见问题的多种妙招。

文章详解介绍

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学习帮助非常大,如果你对这本书感兴趣的话,可以点击链接直接购买:购书直达

猜你喜欢

转载自blog.csdn.net/qq_38951259/article/details/134806313
今日推荐