具体描述
本书由浅入深地介绍了Flutter技术和开发流程,包含大量示例、图片,并含配套示例源码,可帮助读者循序渐进地掌握Flutter开发技术。
本书分为入门篇、进阶篇、实例篇三篇。
●入门篇:讲解Flutter技术的背景和简介、Flutter各种类型的Widget以及如何构建UI。使读者掌握如何使用Flutter来构建UI。
●进阶篇:讲解Flutter中的事件机制、动画、自定义组件、文件、插件、国际化以及Flutter的核心原理等。使读者对Flutter整体构建及原理有一个深入的认识。
●实例篇:以GitHub APP为例,把理论转为实际案例,介绍一个完整的Flutter应用的开发。使开发者全面了解完整的Flutter APP开发流程。
作者简介
杜文(网名wendux),现就职于字节跳动,掘金知名专栏作者、Flutter中文网社区创始人、Flutter中文社区开源项目发起人、GitHub社区知名开发者,也是dio、fly、DSBridge等多个知名开源项目作者。多年从事PC桌面开发、移动端开发以及Web开发,对大前端方向有着广泛的涉猎及丰富的开发经验。
目录信息
【第一篇 入门篇】
●第1章 起步 2
1.1 移动开发技术简介 2
1.1.1 原生开发与跨平台技术 2
1.1.2 Hybrid技术简介 3
1.1.3 React Native、Weex及快应用 5
1.1.4 QT Mobile 7
1.1.5 Flutter问世 8
1.1.6 总结 9
1.2 初识Flutter 10
1.2.1 Flutter简介 10
1.2.2 Flutter框架结构 12
1.2.3 如何学习Flutter 13
1.3 搭建Flutter开发环境 14
1.3.1 安装Flutter 14
1.3.2 IDE配置与使用 19
1.3.3 连接设备运行Flutter应用 21
1.3.4 Android Studio常见配置问题 24
1.4 Dart语言简介 26
1.4.1 变量声明 27
1.4.2 函数 28
1.4.3 异步支持 30
1.4.4 Stream 34
1.4.5 Dart与Java及JavaScript的对比 35
●第2章 第一个Flutter应用 36
2.1 计数器应用示例 36
2.1.1 创建Flutter应用模板 36
2.1.2 首页 39
2.2 路由管理 42
2.2.1 一个简单示例 43
2.2.2 MaterialPageRoute 44
2.2.3 Navigator 45
2.2.4 路由传值 45
2.2.5 命名路由 47
2.2.6 路由生成钩子 50
2.2.7 总结 50
2.3 包管理 51
2.4 资源管理 55
2.5 调试Flutter应用 60
2.6 Flutter异常捕获 67
2.6.1 Dart单线程模型 67
2.6.2 异常捕获 69
●第3章 基础组件 73
3.1 Widget简介 73
3.1.1 概念 73
3.1.2 Widget与Element 73
3.1.3 Widget主要接口 74
3.1.4 StatelessWidget 75
3.1.5 StatefulWidget 77
3.1.6 State 78
3.1.7 在Widget树中获取State对象 84
3.1.8 Flutter SDK内置组件库介绍 85
3.2 状态管理 87
3.2.1 Widget管理自身状态 88
3.2.2 父Widget管理子Widget的状态 89
3.2.3 混合状态管理 91
3.2.4 全局状态管理 93
3.3 文本及样式 94
3.3.1 Text 94
3.3.2 TextStyle 95
3.3.3 TextSpan 95
3.3.4 DefaultTextStyle 96
3.3.5 字体 97
3.4 按钮 99
3.4.1 Material组件库中的按钮 99
3.4.2 自定义按钮外观 100
3.5 图片及ICON 102
3.5.1 图片 102
3.5.2 ICON 107
3.6 单选开关和复选框 109
3.6.1 属性及外观 110
3.6.2 总结 110
3.7 输入框及表单 110
3.7.1 TextField 110
3.7.2 Form 118
3.8 进度指示器 122
3.8.1 LinearProgressIndicator 122
3.8.2 CircularProgressIndicator 123
3.8.3 自定义尺寸 124
3.8.4 颜色动画 125
3.8.5 自定义进度指示器样式 126
●第4章 布局类组件 127
4.1 布局类组件简介 127
4.2 线性布局(Row和Column) 128
4.3 弹性布局(Flex) 133
4.4 流式布局 136
4.4.1 Wrap 136
4.4.2 Flow 137
4.5 层叠布局 139
4.6 对齐与相对定位(Align) 141
4.6.1 Align 142
4.6.2 Align与Stack对比 144
4.6.3 Center组件 145
●第5章 容器类组件 146
5.1 填充(Padding) 146
5.2 尺寸限制类容器 147
5.2.1 ConstrainedBox 147
5.2.2 SizedBox 148
5.2.3 多重限制 149
5.2.4 UnconstrainedBox 150
5.2.5 其他尺寸限制类容器 152
5.3 装饰容器(DecoratedBox) 152
5.4 变换(Transform) 153
5.5 Container 156
5.6 Scaffold、AppBar和底部导航 158
5.6.1 Scaffold 158
5.6.2 AppBar 160
5.6.3 抽屉菜单 163
5.6.4 FloatingActionButton 165
5.6.5 底部导航栏 165
5.7 剪裁(Clip) 166
●第6章 可滚动组件 169
6.1 可滚动组件简介 169
6.2 SingleChildScrollView 171
6.3 ListView 172
6.4 GridView 179
6.5 CustomScrollView 184
6.6 滚动监听及控制 187
6.6.1 ScrollController 187
6.6.2 滚动监听 191
●第7章 功能型组件 194
7.1 导航返回拦截(WillPopScope) 194
7.2 数据共享(InheritedWidget) 195
7.3 跨组件状态共享(Provider) 200
7.4 颜色和主题 210
7.4.1 颜色 210
7.4.2 主题 212
7.5 异步UI更新 215
7.5.1 FutureBuilder 216
7.5.2 StreamBuilder 218
7.6 对话框详解 219
7.6.1 使用对话框 219
7.6.2 打开动画及遮罩 224
7.6.3 对话框实现原理 226
7.6.4 对话框状态管理 227
7.6.5 其他类型的对话框 235
【第二篇 进阶篇】
●第8章 事件处理与通知 242
8.1 原始指针事件处理 242
8.2 手势识别 245
8.2.1 GestureDetector 245
8.2.2 GestureRecognizer 249
8.2.3 手势竞争与冲突 251
8.3 事件总线 253
8.4 Notification 255
●第9章 动画 261
9.1 Flutter动画简介 261
9.2 动画基本结构及状态监听 265
9.2.1 动画基本结构 265
9.2.2 动画状态监听 270
9.3 自定义路由切换动画 270
9.4 Hero动画 273
9.5 交织动画 275
9.6 通用切换动画组件 278
9.6.1 AnimatedSwitcher 279
9.6.2 AnimatedSwitcher的高级用法 282
9.7 动画过渡组件 286
9.7.1 自定义动画过渡组件 286
9.7.2 Flutter预置的动画过渡组件 293
●第10章 自定义组件 297
10.1 自定义组件方法简介 297
10.2 组合现有组件 298
10.3 组合实例:TurnBox 301
10.4 自绘组件(CustomPaint与Canvas) 305
10.5 自绘实例:圆形背景渐变进度条 309
●第11章 文件操作与网络请求 318
11.1 文件操作 318
11.2 通过HttpClient发起HTTP请求 320
11.3 dio HTTP请求库 327
11.4 示例:HTTP分块下载 329
11.5 使用WebSockets 334
11.6 使用Socket API 338
11.7 JSON转Dart Model类 338
●第12章 包与插件 348
12.1 开发Package 348
12.2 插件开发:平台通道简介 352
12.3 开发Flutter插件 355
12.4 插件开发:Android端API实现 357
12.5 插件开发:iOS端API实现 360
12.6 Texture和PlatformView 364
12.6.1 Texture(示例:使用摄像头) 364
12.6.2 PlatformView(示例:WebView) 373
●第13章 国际化 375
13.1 让APP支持多语言 375
13.2 实现Localizations 379
13.3 使用Intl包 381
13.4 国际化中的常见问题 386
●第14章 Flutter核心原理 388
14.1 Flutter UI系统 388
14.2 Element与BuildContext 390
14.2.1 Element 390
14.2.2 BuildContext 391
14.3 RenderObject和RenderBox 395
14.3.1 布局过程 395
14.3.2 绘制过程 398
14.3.3 命中测试 401
14.3.4 语义化 402
14.3.5 总结 403
14.4 Flutter运行机制:从启动到显示 403
14.5 图片加载原理与缓存 410
14.5.1 ImageProvider 410
14.5.2 Image组件原理 418
【第三篇 实例篇】
●第15章 一个完整的Flutter应用 422
15.1 GitHub客户端示例 422
15.2 Flutter APP代码结构 423
15.3 Model类定义 424
15.4 全局变量及共享状态 427
15.4.1 全局变量:Global类 427
15.4.2 共享状态 428
15.5 网络请求封装 430
15.5.1 网络接口缓存 430
15.5.2 封装网络请求 433
15.6 APP入口及主页 435
15.6.1 APP入口 435
15.6.2 主页 437
15.6.3 抽屉菜单 443
15.7 登录页 446
15.8 多语言和多主题 449
15.8.1 语言选择页 449
15.8.2 主题选择页 451
参考文献 452
· · · · · · (收起)
读后感
用户评价
**评价四** 这是一本我愿意反复阅读的书。在我看来,《Flutter实战》最大的价值在于它提供了一个非常扎实的Flutter开发基础。我之前尝试过一些其他的Flutter学习资源,但总感觉它们要么过于零散,要么就是缺乏系统性。这本书不同,它就像一个精心设计的课程体系,从入门到进阶,逻辑清晰,层层递进。作者在讲解过程中,不仅仅是告诉你“怎么做”,更重要的是告诉你“为什么这么做”。比如,在讲到Dart的异步编程时,作者就详细地解释了Future、async/await的原理,以及它们在实际开发中的应用场景,这让我对Dart的异步处理有了更深刻的理解,也避免了我之后在处理耗时操作时走弯路。而且,书中对于各个Widgets的组合使用,以及如何通过自定义Widget来复用UI,都有非常精彩的讲解。我经常会参考书中关于自定义Widget的章节,来学习如何构建更具可维护性和扩展性的代码。这本书最大的好处就是,它能让你在遇到问题的时候,不再是茫然无措,而是能够根据书中的知识,找到解决问题的思路和方法。它培养了我一种独立思考和解决问题的能力。我还会经常将书中提到的最佳实践应用到我的项目中,这极大地提高了我的代码质量和开发效率。
**评价九** 我一直相信,好的学习资料能够事半功倍。而《Flutter实战》这本书,正是这样的存在。在我接触Flutter初期,我也是走了不少弯路,看了不少的零散的教程,但总感觉知识点碎片化,不成体系。这本书的出现,彻底改变了我的学习状态。作者的讲解风格非常独特,他不仅仅是告诉你“是什么”,更重要的是告诉你“为什么”。比如,在讲解Widget的构建过程时,作者就详细地分析了Element Tree、RenderObject Tree等概念,让我能够从更底层的角度去理解Flutter的渲染机制。这对于我之后进行性能优化,以及解决一些疑难杂症,都起到了至关重要的作用。而且,书中对于各种常用Widgets的讲解,都非常深入,不仅仅是列出属性,而是详细地分析了它们的使用场景和注意事项。我尤其喜欢书中关于布局的章节,作者用非常生动的比喻,将复杂的布局概念讲得通俗易懂,让我能够轻松地构建出各种复杂的UI界面。这本书让我感觉自己不再是在“学习”Flutter,而是在“玩转”Flutter。
**评价五** 读完《Flutter实战》,我感觉自己对Flutter的理解上升到了一个新的高度。之前我对Flutter的印象可能就是“写UI很方便”,但这本书让我看到了Flutter更深层的魅力。作者在书中花了很大篇幅讲解了Flutter的渲染机制、Widget的生命周期、以及如何进行性能优化。这些内容虽然听起来有点“硬核”,但作者用非常通俗易懂的语言和形象的比喻,将这些复杂的概念解释得明明白白。我记得书中对于“Widget is immutable”的讲解,以及StatefulWidget和StatelessWidget的区别,让我彻底理解了Flutter的响应式UI的本质。而且,书中还提供了不少关于如何构建复杂UI、如何处理动画、以及如何与其他原生平台进行交互的实战案例,这些内容对于我这样一个想要开发更接近原生体验的Flutter应用的开发者来说,非常有价值。这本书不仅仅是一本技术书籍,更像是一位经验丰富的导师,在我学习Flutter的道路上,给予了我宝贵的指导和启发。我还会时不时地翻阅这本书,每次都能从中获得新的感悟和灵感。这本书让我从一个“使用者”变成了一个“理解者”,甚至是一个“创造者”。
**评价七** 我一直认为,一本好的技术书籍,不应该仅仅是知识的堆砌,更应该是一种思维的引导。而《Flutter实战》这本书,恰恰做到了这一点。作者在讲解Flutter的各个方面时,并没有生硬地罗列API,而是着重于培养读者的“Flutter思维”。比如,在讲到Widget的组合和复用时,作者就通过大量的例子,强调了如何通过合理的组件化设计,来提高代码的可读性和可维护性。书中对于状态管理的讲解,也是我非常欣赏的一部分。作者并没有推荐某一种“银弹”式的状态管理方案,而是详细地对比了各种方案的优缺点,并分析了它们适用的场景,让我能够根据项目的实际需求,做出最明智的选择。我从这本书中获得的,不仅仅是Flutter的技术知识,更重要的是一种“如何用Flutter高效地解决问题”的思路。这种思维方式,让我即使在遇到书中没有直接提及的复杂问题时,也能举一反三,找到解决方案。这本书让我感觉自己不再是孤军奋战,而是有了一个强大的后盾。我还会时不时地把书中的理念应用到我的工作中,这极大地提升了我的开发效率和代码质量。
**评价三** 我一直觉得,学习一门新的编程语言或框架,最难熬的阶段就是初期。当你对一切都还不熟悉,看着满屏的代码却不知道它的意义,那种挫败感真的会让人想放弃。《Flutter实战》这本书,在我最需要的时候出现了。它不像一些教程那样,上来就堆砌各种高级概念,而是从最基础的“Hello, World!”开始,一步一步地引导你进入Flutter的世界。作者的讲解非常细致,对于每一个Widget的属性、每一个方法的用法,都给出了清晰的解释和生动的例子。我记得书中讲到GestureDetector的时候,作者不仅解释了它的各种手势识别功能,还通过一个简单的图片拖拽小案例,让我亲身体验了如何实现这些功能。这种“学以致用”的学习方式,让我在掌握知识的同时,也充满了成就感。而且,这本书的排版也很舒服,代码块清晰,图片也很精美,阅读起来一点都不费力。我常常会在工作的间隙,抽出半小时来读上几页,感觉自己的Flutter知识体系在不断地被夯实。我尤其喜欢书中对于Widget生命周期的讲解,这一点对于理解Flutter的渲染机制和性能优化至关重要。通过这本书,我才真正理解了为什么Flutter的UI渲染如此高效。它让我从一个“搬运工”变成了能够理解和创造的开发者。
**评价一** 这本《Flutter实战》简直就像我Flutter学习之路上的定海神针!在我刚接触Flutter那会儿,简直是一头雾水,各种概念、各种组件,感觉像是在一个巨大的迷宫里打转,找不到方向。市面上也看了不少资料,但总觉得要么太浅显,要么就是讲得过于理论化,离实际开发总有一层隔阂。直到我翻开了这本书,那种豁然开朗的感觉至今难忘。作者并没有一开始就抛出一大堆晦涩难懂的概念,而是循序渐进,从最基础的Dart语言特性讲起,然后逐步过渡到Flutter的核心Widget、布局、状态管理等等。每一章节的内容都围绕着“实战”二字,不是空谈理论,而是通过大量的代码示例,手把手地教你如何去实现一个功能,如何去构建一个UI。我尤其喜欢书中对于各种常用Widget的讲解,不仅仅是列出它们的功能,更重要的是解释了它们背后的原理,以及在什么场景下使用最合适。比如,在讲到Row和Column的时候,作者就详细地分析了主轴和交叉轴的概念,以及它们与Expanded、Flexible等Widget的配合使用,让我在布局方面一下子就清晰了很多。而且,书中的代码质量非常高,注释也很清晰,让我这个初学者也能快速理解。遇到问题的时候,我也常常会翻回去查阅相关的章节,总能找到一些启发。这本书真正做到了“授人以鱼不如授人以渔”,让我不仅学会了如何使用Flutter,更理解了它为何这样设计,这对我后续的学习和独立解决问题起到了至关重要的作用。
**评价十** 《Flutter实战》这本书,可以说是我Flutter学习旅程中的一座灯塔,照亮了我前行的方向。我之前也尝试过学习Flutter,但总是感觉摸不到头脑,特别是对于一些比较抽象的概念,总是理解得模模糊糊。这本书的出现,彻底颠覆了我的认知。作者在讲解每一个知识点的时候,都做得非常细致,并且结合了大量的实际代码示例。我记得书中关于状态管理的讲解,作者详细地分析了setState、Provider、Bloc等不同的状态管理方案,并给出了它们各自的优缺点和适用场景。这让我能够根据项目的实际情况,选择最适合的状态管理方案,而不是盲目地跟风。而且,书中还包含了一些关于Flutter动画、自定义Widget、以及与原生平台交互的章节,这些内容对于我这样一个想要开发更具吸引力和功能的Flutter应用的开发者来说,非常有价值。这本书让我感觉自己不再是Flutter的“菜鸟”,而是能够自信地应对各种Flutter开发挑战的“老手”。我还会时不时地将书中提到的优秀实践,应用到我的项目中,这极大地提升了我的开发效率和代码质量。
**评价八** 《Flutter实战》这本书,绝对是Flutter开发者必备的“工具箱”。我之所以这么说,是因为这本书的内容非常全面,几乎涵盖了Flutter开发中的方方面面。从基础的Dart语言特性,到复杂的UI布局、状态管理、网络请求、动画、以及与原生平台的交互,书中都有详尽的讲解和大量的实战案例。我特别喜欢书中对于自定义Widget的讲解,作者通过几个非常贴近实际需求的例子,让我学会了如何创建功能强大、样式丰富的自定义Widget。这对于我来说,是极大的提升。而且,书中还包含了一些关于Flutter性能优化和打包发布的章节,这些内容对于我这样一个想要将自己的App发布到应用商店的开发者来说,是不可或缺的。我还会经常将书中的代码作为参考,来快速实现一些功能。这本书让我感觉自己不再是Flutter的“新手”,而是能够胜任各种Flutter开发任务的“熟练工”。我还会把我从书中学习到的经验和技巧,分享给我的同事,让他们也能从这本书中受益。
**评价六** 《Flutter实战》这本书,绝对是我近几年来阅读过的最有价值的技术书籍之一。它真正做到了“实战”二字,书中大量的代码示例,都是可以直接拿来运行、学习、甚至修改使用的。作者在讲解每一个知识点的时候,都会结合实际的应用场景,让你知道这个知识点在实际开发中有何意义,以及如何去应用它。我特别喜欢书中关于网络请求和数据持久化的章节,作者详细地讲解了如何使用Dio库进行网络请求,以及如何使用SharedPreferences、SQLite等方式来存储本地数据。这些都是移动应用开发中最基本也是最重要的功能。通过书中的案例,我能够快速地搭建起一个完整的应用骨架,并在此基础上进行功能的扩展。而且,作者在讲解过程中,还会时不时地分享一些他自己遇到的开发经验和技巧,比如如何优雅地处理网络错误,如何优化数据库查询性能等等,这些都让我受益匪浅。这本书让我对Flutter的工程化开发有了更清晰的认识,也让我学会了如何写出更健壮、更易于维护的代码。我还会把书中一些优秀的代码片段保存下来,作为我日常开发的参考。
**评价二** 老实说,拿到《Flutter实战》这本书的时候,我心里是抱有一些疑虑的。毕竟,Flutter技术更新迭代的速度非常快,一本纸质书的内容很容易就会过时。我之前也遇到过买了最新的技术书籍,结果没过多久就发现很多API或者最佳实践都已经不是最新的了,这让我觉得有点浪费。然而,《Flutter实战》这本书给了我一个大大的惊喜。作者在内容的选择上非常巧妙,着重于讲解Flutter的核心概念和原理,而不是一些转瞬即逝的API细节。例如,书中对于Widget树、声明式UI、异步编程等核心概念的阐述,即使Flutter有更新,这些基础的理念依然是通用的。同时,书中也包含了一些比较实用的进阶主题,比如网络请求、数据库操作、动画实现等,这些都是实际开发中必不可少的技能。我特别欣赏书中关于状态管理的讨论,不同的状态管理方案都有深入的分析和对比,让我能够根据项目的实际需求来选择最合适的方案,而不是盲目跟风。而且,作者还分享了一些在实际项目开发中可能会遇到的坑,以及如何规避这些问题,这对于我这样一个刚刚开始涉足Flutter开发的开发者来说,简直是宝藏!我从这本书中获得的不仅仅是技术知识,更重要的是一种解决问题的思维方式和工程实践的经验。我还会经常将书中的示例代码作为参考,并在此基础上进行扩展和修改,这极大地提高了我的开发效率。
整本书读下来,入门没问题。
整本书读下来,入门没问题。
盼星星盼月亮,终于盼来了wendu老师的这本实体书~很赞~内容也很扎实,满满的干货~
整本书读下来,入门没问题。
指哪儿打哪儿的么得感情的小工小任,源码部分讲的真好,赶紧迁移到flutter吧,我超想用