首页>参考读物>计算机科学与技术>软件与程序设计

Flutter之旅
作者 : 张德立 编著
出版日期 : 2020-08-17
ISBN : 978-7-111-66234-1
定价 : 119.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 285
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书从一个Android原生开发者的角度去认识和了解Flutter,本书作者以幽默生动的故事描写手法,记录在Flutter学习中所遇见的景色,并呈现给读者,主要内容包括:Flutter的安装与基本概念,Dart语法、组件与容器、布局基础、动画与手势、自定义组件、资源与路由、Flutter框架、Flutter与Redux、Flutter与iOS、插件开发、综合案例等。

图书特色

由浅入深地全面介绍Flutter技术
包含大量案例与代码
全彩色、全方位
展示Flutter的基本概念与操作方式

图书前言

  我目前从事Flutter桌面应用的开发,深刻领会到Flutter功能的强大。Flutter对于桌面的支持已经很不错了,网络、数据库、UI界面这三者都已经完备。在众多开发者的推动之下,Flutter正在不断壮大和完善,我相信它的未来是光明的。
  Flutter框架中内置的Widget有300多个,对于一个初学者而言,把它们全都看完是不现实的,也没有必要。很多初学者认为Widget是Flutter的一切,其实Widget只是半壁江山,Flutter还拥有强大的绘制接口、异步处理能力、完整的网络、文件操作接口以及状态管理工具。
  本书主要想让初学者对Flutter有一个比较全面的认识。我觉得一次学习过程就像一次旅行,对我们要去的地方从全然不知,到渐渐熟悉,当我回首时,发现这一路的成长中包括了困惑、犹豫、兴奋、痛苦、快乐。现在,我又回到了起点,背起行囊带你一起出发,一点点去认识Flutter。
  旅途之初,我会为你备好行囊和工具:介绍Debug和开发工具,然后介绍Dart语言和基础的组件使用。本书介绍了很多实用的组件,以及动画、路由,还介绍了一些Flutter框架渲染层的知识和相关源码,虽然不是非常深入,但会让你对Flutter的了解更加深入。本书还包括数据的处理和状态管理、异步处理、数据库操作等,最后介绍了插件和混合开发。
  本书没有把纷繁复杂的组件都讲了,只挑一些重要的组件深入剖析,让读者学会认识组件。为了让读者掌握如此多的组件,我特意开源了一个FlutterUnit项目,地址为https://github.com/toly1994328/FlutterUnit。其中收录了约250个组件,每一个组件都会附加详细的说明和示例代码。这个项目目前已支持Android、iOS、MacOS和Windows系统,可以帮初学者快速、直观地了解Flutter中有哪些组件可以使用,以及如何使用。FlutterUnit项目可以全面搜索并具备完整的分类,可以很容易地找到想要了解的组件。开源的另一个好处就是方便更新与修改。
  由于Flutter多平台的特性,它的环境配置、开发环境搭建、模拟器运行等操作比较多,也比较简单。但是实际应用中总会遇到一些问题,为此我综合考虑了很多,最后决定在FlutterUnit项目中也列出问题及解决方案。在项目的主页里还列出了关于Flutter在各平台上的配置方面的文章。另外,我会不定期在Issues中分享一些经验和错误处理方式,当然你也可以一起分享,这也是建立FlutterUnit的初衷。后期会根据Issues的分享将其加入FlutterUnit中,作为入门者的最佳助力。此外,在Issues的point标签中,还会收录一些易错点和要点,对本书的勘误也在Issues中指出。FlutterUnit是我的个人开源行为,任何人都可以享用。
  本书主要面向有一定编程经验的读者,对基础知识讲解不多,如果你觉得本书太难,那你需要自行补充一些基础的编程知识。遇到困难试着多读几遍,对着源码仔细推敲,或许就能豁然开朗。如果书中存在错误,还请读者见谅,有任何建议也请及时联系我。
本书的源码规划
  本书用的源码Flutter SDK版本为 1.12.13+hotfix.8。许多编程书的demo案例都按照章节组织,或每个知识点是一个小项目,这有很大的缺点:找起来比较麻烦,而且打开一个项目也很费时间,更大的问题的是项目产生的垃圾很占内存。所以按知识点分立项目并不可取。
  由于Flutter可以让一个个知识点独立成Widget进行展现,因此本书将所有代码放在同一个项目中。在学习的过程中你可以新建一个空白项目,然后一点一点累积成源码的结构,记录自己的成长。
  例如,每章的源码在一个day里,每个day中有相应的知识点包,每个包里都有一个可运行的main.dart文件,每一个包代表一个小知识点或小节。这样就可以独立记录细碎的知识点,并且很清楚地记录它如何一步步演变,比如状态管理如何一步步演变得更优雅。
  另外,Flutter可以指定运行的main入口,这就让这种处理方式更加优雅,如下图右侧所示,这样每个小的知识点包也可以作为单独的运行块。你可以快速切换,以查看该小节知识点运行的情况。也就是说,花3秒就能切换一个知识点。如果知识点在一个单独的项目里,那么切换一个知识点至少需要一分钟,也无法感受到知识的连贯性。

  但这样做也会存在一个缺点,就是如果一个项目中代码过多,那么定位知识点会比较麻烦。一个服务器上的数据资源也是非常多而杂乱的,但是可以很方便地获取特定资源,这归功于统一资源定位符,即URL。
  具体进行如下处理:你会发现在书中的相关源码处专门有个头标指向源码的地址,如下图所示。这样你可以迅速定位到相关位置,只要运行该包下的main.dart就可以立刻看到该知识点的展示效果。你可以将它看作内存寻址,源码就是资源库,而标识就是指向某一资源的指针,使用该指针就能打开相应的资源。
  
  希望书和源码两者结合能擦出智慧的火花,为你的阅读过程带来便利。
关于Widget图鉴
  为了让大家对Flutter组件有整体的认识,我特意制作了Widget图鉴,地址为https://github.com/toly1994328/FlutterUnit/tree/master/widgets_unity。
  这些图鉴以图片形式放在FlutterUnit项目中,这样方便维护和更新。其中包含大多数常用的Widget,图鉴中的每个组件都可以在FlutterUnit项目源码中看到。图鉴主要包括StatelessWidget、StatefulWidget、SingleChildRenderObjectWidget和MultiChildRender-
ObjectWidget组件,这四种组件涵盖了日常工作中使用的绝大多数组件。

  图鉴提供常用Widget的基本效果图,对常用的属性进行标注,主要目的是让初学者更直观地了解常用组件,不至于被众多组件弄糊涂。如果想要看某个图鉴具体效果的实现,可以在FlutterUnit项目中通过全局搜索获得。
  你也可以在FlutterUnit的App中搜索,其中每个组件都有详情介绍。每个知识点都会有对应的组件使用效果,点击右侧的折叠按钮,可以展开对应的代码,并且提供代码的复制功能,这样你可以很方便地得到一个组件用法的源码。

本书知识规划
  我在写作时更想专注于Flutter技术本身,希望让你在每一页都能学到东西。我还想向你分享一些我的思考方式和对问题的见解。另外,书中有大量的图片、类比的手法,相信你在读书过程中不会觉得太无趣。希望让你有种背上行囊随我旅行12天,我们共同见证、欣赏Flutter世界的感觉。
  Day 1:初识Flutter与技能储备。首先,重新认识Flutter初始项目,并在此基础上提出两个问题,借这两个问题来介绍Debug的使用方法。然后,介绍Android Studio中针对Flutter的实用工具,“磨刀不误砍柴工”,把“拖鞋”换成“运动鞋”再开始旅行。最后,分享一些关于Flutter中Widget的见解,从整体上先感受一下Widget,再说明组件抽离的必要性,不要把所有鸡蛋(组件)放在同一个篮子(文件)里。
  Day 2:Dart实用语法速览。Dart作为新时代的编程语言,有着优秀且优雅的语法。本章分别从基础语法、面向对象和Dart特殊语法三个层面展开对Dart语法的介绍,并结合实际使用以及源码来学习。
  Day 3:界面风格和简单绘制。介绍Flutter中的两种界面风格,以及一个简单的App界面如何搭建。对Flutter的视图层有一个整体的认知将为之后的学习打下基础。另外,还介绍Flutter中的简单绘制,可以看出Android等其他平台的绘制技能在Flutter中完全适用。
  Day 4:基础Widget。首先通过基础的图文组件介绍属性的使用,以及批量制作某属性的对比图,让你摆脱“属性黑洞”的束缚。然后以图解的形式对容器组件和多子组件进行介绍,使你更直观地认识各个属性的作用,进而掌握基本的布局功能。
  Day 5:列表与滑动。首先讲述如何将一个组件抽离,封装成条目以供列表使用,再通过ListView填充数据展现条目,通过一个聊天界面介绍如何实现下拉和上拉的功能。然后对滑动控制器和其他滑动进行介绍,如单子滑动组件和GridView、PageView以及Sliver家族。
  Day 6:动画与路由。详细介绍在Flutter中如何实现动画,从一开始的运动盒到可以动态变化的n角星,努力揭示了动画的本质。然后介绍如何简化和封装组件,让动画更加强大、好用。本章介绍路由的跳转、传参、回参、管理、动画等知识,将路由放在这里是因为路由与动画有所关联,掌握这些知识就可以创建一个相对复杂的界面系统。
  Day 7:手势组件与自定义组件。如果一个组件经常被用到,或者可以独立于项目之外分享给很多人用,那么封装成一个自定义组件是很好的方式。本章先简单介绍Flutter中手势的处理,并自定义一个手写板,然后通过原生组件实现自定义组件;通过绘制组件可以了解如何在Flutter的画板上绘制文字和图片,以及进行一些复杂的数学计算。
  Day 8:Flutter渲染机制。本章将深入Flutter框架层的源码中,谈论Widget、RenderObject、Element三棵树,介绍Flutter的main函数是如何运行的,以及Element的加载流程,最后全面介绍State及其生命周期。
  Day 9:异步与资源。本章将介绍异步与流这个强大武器,并通过文件的操作加深对两者的理解。然后介绍Flutter网络请求的方式以及对数据资源的处理方式。
  Day 10:数据共享与状态管理。本章先介绍数据传输中InheritedWidget的解决方案,然后介绍状态管理的处理过程以及FutureBuilder和StreamBuilder的用法,最后介绍BLoC、Provider、Redux三个状态管理工具及其使用案例。
  Day 11:数据持久化和读取。本章分别从数据库、json数据文件、XML配置文件来介绍如何进行持久化处理,并介绍如何访问数据库,查询结果并填充界面,并通过界面完成增、删、改、查操作。
  Day 12:插件及混合开发。首先介绍Flutter和原生平台的通信机制,之后介绍几个常用的插件,包括路径和权限申请、音频播放、视频播放、图片拾取、Web页面,最后介绍Flutter与原生平台的混合开发。
  最后,感谢家人和伙伴们的支持和建议,感谢吴怡编辑的邀请,让我有机会将这些技术知识分享给大家。希望大家在学习过程中能够收获满满。Flutter的旅程即将开始,试着深呼吸一下,和我一起出发吧,去见证Flutter的奇妙世界!
  
  张德立(张风捷特烈)  
  于2020年3月10日

上架指导

计算机\移动开发

封底文字

学习就像一场旅行,作者为想要入门Flutter的朋友提供引导,介绍Flutter世界的风貌。本书包含大量案例以及一些Flutter框架层源码解读,让读者能够对Flutter技术有更全面的认识。

主要内容包括:
●  对调试的认识和对Flutter初始项目的分析。
●  Flutter整体认知和Dart常用语法速览。
●  常用组件的用法介绍和如何自定义绘制组件。
●  Flutter动画、手势的使用和路由跳转。
●  从框架层源码角度进一步认识Flutter渲染机制。
●  异步和流的详解与文件操作方法。
●  共享数据的处理方式和状态管理。
●  使用SQLite数据库、XML配置文件等实现数据持久化存储。
●  通过Flutter与平台间的通信制作插件的方法。
●  如何将Flutter集成到现有项目以进行混合开发。

图书目录

前言
Day 1 初识Flutter与技能储备 1
1.1 Flutter初始项目分析 1
1.1.1 Flutter初始项目结构 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 断点和放行 7
1.2.2 变量查询和唤醒程序 8
1.2.3 Debug要点补充 9
1.3 辅助技能储备 10
1.3.1 三个实用工具 10
1.3.2 片段代码和快速重构 12
1.3.3 三个基础知识QA 14
1.4 Widget知识储备 15
1.4.1 命令式UI编程与声明式UI编程 16
1.4.2 认识Widget体系 16
1.4.3 Widget源码初识 18
1.4.4 组件的提取抽离 21
Day 2 Dart实用语法速览 23
2.1 基础语法 23
2.1.1 常用的数据类型 23
2.1.2 变量与常量 26
2.1.3 函数的使用 27
2.2 通过Size类看Dart中的面向对象 30
2.3 其他语法点 34
2.3.1 常用符号与关键字 34
2.3.2 库的使用和可见性 35
2.3.3 泛型 36
2.3.4 异步 37
2.3.5 异常处理 38
Day 3 界面风格和简单绘制 39
3.1 Material风格 40
3.1.1 Scaffold和BottomNavigationBar 40
3.1.2 TabBar和TabBarView 41
3.1.3 标题栏按钮和菜单组件 42
3.1.4 弹出对话框 43
3.1.5 界面的左右滑页 43
3.1.6 showSnackBar和showBottomSheet 44
3.2 Cupertino风格 45
3.2.1 CupertinoPageScaffold和CupertinoTabScaffold 46
3.2.2 CupertinoNavigationBar和CupertinoTabBar 46
3.2.3 CupertinoTabView 47
3.2.4 CupertinoAlertDialog和showCupertinoModalPopup 47
3.3 认识CustomPainter绘制 49
3.3.1 绘制网格 49
3.3.2 Canvas初级绘制 50
3.3.3 移植绘制n角星 52
3.3.4 移植绘制粒子数字 54
Day 4 基础Widget 56
4.1 Text组件 56
4.1.1 Text的基本使用 56
4.1.2 Text的阴影和装饰线 57
4.1.3 文字方向、对齐和溢出处理 58
4.1.4 RichText的使用 59
4.1.5 RichText与Text.rich 60
4.2 Image组件 60
4.2.1 Image资源的加载 61
4.2.2 图片的适应模式 62
4.2.3 图片颜色及混合模式 63
4.2.4 图片对齐模式及重复模式 63
4.2.5 用centerSlice实现图片局部放大 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 列表与滑动 79
5.1 组件封装 79
5.1.1 静态布局 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的构造及分隔线 85
5.2.3 ListView的不同样式 87
5.2.4 ListView的上拉与下拉 87
5.3 常用滑动组件 90
5.3.1 单子滑动组件SingleChildScrollView 90
5.3.2 滑动控制器ScrollController 92
5.3.3 滑页组件PageView 94
5.3.4 网格组件GridView 97
5.4 Sliver家族 99
5.4.1 SliverAppBar的使用 100
5.4.2 Sliver中的列表布局、网格布局及普通布局 101
5.4.3 吸顶效果SliverPersistentHeader 103
Day 6 动画与路由 106
6.1 动画闲谈 106
6.1.1 FPS 106
6.1.2 动画控制器AnimationController 107
6.1.3 运动盒 108
6.2 Flutter动画详解 111
6.2.1 Animation和Animatable 111
6.2.2 动画状态监听和Animation方法 116
6.2.3 动画简化和封装 117
6.2.4 封装强化版FlutterContainer 118
6.3 路由与导航 122
6.3.1 打开路由 122
6.3.2 路由的传参 125
6.3.3 路由的跳转动画 128
6.3.4 Hero跳转动画 130
Day 7 手势组件与自定义组件 132
7.1 手势组件与使用 132
7.1.1 InkWell水波纹的使用 132
7.1.2 GestureDetector的使用 133
7.1.3 手写板的实现 135
7.2 根据现有组件实现自定义组件 137
7.2.1 切换Widget组件 137
7.2.2 颜色选择圆钮组件ColorChooser 139
7.2.3 函数运动组件MathRunner 142
7.3 绘制自定义组件 143
7.3.1 能力分析组件AbilityWidget 143
7.3.2 图片放大组件BiggerView 147
7.3.3 波纹线RhythmView 150
Day 8 Flutter渲染机制 153
8.1 认识三棵树 153
8.1.1 漫谈Widget、Element、RenderObject 154
8.1.2 认识RenderObject和Element 156
8.1.3 三棵树结构 158
8.1.4 三个根结点的初始化 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的生命周期回调 169
8.3.2 State切换和跳转时生命周期测试 173
8.3.3 setState做了什么 175
Day 9 异步与资源 178
9.1 认识异步与流 178
9.1.1 Dart中的异步任务 178
9.1.2 Dart中的流 181
9.2 文件中的异步与流 184
9.2.1 文件的简单操作 184
9.2.2 文件读写的异步操作 186
9.2.3 文件读写的流操作 188
9.2.4 使用文件打造图标转换工具 190
9.3 网络请求与json解析 193
9.3.1 使用GitHub开放API 测试网络访问 193
9.3.2 json解析 197
9.3.3 异步方法的基本使用 199
Day 10 数据共享与状态管理 202
10.1 数据共享和参数传递 202
10.1.1 数据共享的传统实现方式 202
10.1.2 用InheritedWidget实现数据共享 204
10.2 状态管理的原始处理过程 207
10.2.1 数据准备与界面说明 207
10.2.2 FutureBuilder与StreamBuilder的使用 209
10.3 使用插件进行状态管理 213
10.3.1 BLoC对数据状态的管理 213
10.3.2 Provider对数据状态的管理 219
10.3.3 Redux对数据状态的管理 225
Day 11 数据持久化和读取 230
11.1 Flutter中的数据库存储 230
11.1.1 数据库的初始化 231
11.1.2 使用sqflite进行增删改查 234
11.1.3 数据库数据与UI界面的对接 237
11.2 表单与数据持久化 240
11.2.1 表单注册页 240
11.2.2 持久化json数据和读取 241
11.2.3 持久化XML数据和读取 243
Day 12 插件及混合开发 245
12.1 Flutter和平台间的通信方式 246
12.1.1 Flutter/Dart端 246
12.1.2 Android/Kotlin端 247
12.1.3 用toast连接两个世界 248
12.1.4 Flutter向平台传参 250
12.1.5 插件的使用和上传 253
12.2 Flutter常见插件的使用 255
12.2.1 路径插件和权限插件 255
12.2.2 音频播放插件audioplayer 257
12.2.3 视频播放插件video_player 259
12.2.4 图片拾取器image_picker 261
12.2.5 通过webview_flutter使用已有Web页面 262
12.3 Flutter的混合开发 264
12.3.1 Flutter和Android混合开发 264
12.3.2 Flutter和iOS混合开发 269
12.3.3 让Android视图加入Flutter 271

教学资源推荐
作者: 郑阿奇 主编 顾韵华 等编著
作者: 王珊珊 臧洌 张志航 编著
作者: 雷大正 王啸楠 丁德成 等编著  岳丽华 主审
作者: 邱李华 郭志强 曹青
参考读物推荐