# 第二版序

转眼间从本书第一版电子版发布到现在已经接近两年时间,这两年中,本书实体书出版并成为Flutter技术类畅销书之一,本书电子版官网UV 超 60 万,日访问人数长期稳定在3500。当然,本书取得如此成绩最主要的一个因素是这两年 Flutter 技术热度持续提高,整个 Flutter 生态和社区也发生了翻天覆地的变化,主要体现在:

  • Flutter 稳定版发布到了2.5,现在已经支持移动端、Web端和PC端,通过Flutter 开发的应用程序能够轻松的在各个平台迁移并获得很好的性能。
  • Flutter 在 Github Star 数上排名已经进入了前20,在跨端框架中已经成为稳稳的第一。
  • 全球很多公司都已经在商业项目中使用 Flutter,比如Google、微软、阿里、字节、百度、京东等,已经有很多成功案例。
  • Flutter 第三方库数量持续保持高速增长,有越来越多的人为Flutter生态贡献代码。Flutter 相关的教程、书籍数量也在高速增长。

综上,可以看见Flutter 技术从第一个测试版发布到现在短短 3 年多时间获得了巨大的成功。而之所以能获得成功的主要原因是:Flutter 既能保持很高的开发效率的又能获得丝滑的性能。根据近几年实践统计,Flutter 相比原生开发,人效能提高近一倍,而性能可以接近原生。

正是因为Flutter 技术发展太快,本书第一版中的部分内容已经过时,在读者们的催促下,才有了第二版的更新。目前第二版处于草稿阶段,尚未正式完成,处于预览阶段,大家如有内容上的建议可以直接在 github 上提 issue。

# 第二版变化

主要有以下变化:

  • 基于最新的 Flutter/Dart 版本(Flutter 2.5),对于书中依赖的第三方库都会升级到最新版本。
  • 有 60% 的内容进行了修改和重构,添加了更多的示例,对部分章节的顺序进行了调整,使学习的梯度更加合理,以期能够循序渐进的帮助读者了解Flutter。
  • 进阶篇中对Flutter中相对较深但很重要的内容进行了深入介绍,比如可Sliver布局协议、渲染相关的 Layer 以及通过定义 RenderObject 的方式来定义组件。
  • Flutter 核心原理一章进行了重写,不再只是停留在文字介绍,同时添加了很多实例来辅助理解Flutter 的布局、绘制等原理。
  • 电子版添加了一些动图。
  • 可能会删除插件开发一章(本书会聚焦于Flutter技术本身,插件开发主要涉及平台开发,有需要查阅相关文档即可)。
  • 修改了第一版中的一些错误。

# 本书组织结构

本书采用由浅入深的方式介绍Flutter技术原理,分为三篇,总计15章,各篇的主要内容如下。

  • 第一篇,入门篇(第1章~第5章),包括Flutter技术的出现背景和简介、Flutter的各种类型的Widget以及如何构建UI。通过学习本章,读者可以掌握如何使用Flutter来构建UI界面。
  • 第二篇,进阶篇(第6章~第14章),包括可滚动组件、事件机制、动画、自定义组件、文件和网络、国际化以及Flutter核心原理等。通过本章内容,读者可以对Flutter整体构建及原理有一个深入的认识。
  • 第三篇,实例篇(第15张),本章主要通过一个简版的Github APP来将前面介绍的内容串起来,让开发者对一个完整的Flutter APP开发流有个了解。

由于Flutter的很多知识点是相互交织的,很难将它们彻底划分开,所以本书中也难免会出现一些在前面章节会使用在后面章节的场景,比如我们在入门篇介绍进度指示器时会用到在进阶篇中才介绍的动画相关知识。本书中对于这种情况会在相应的章节进行说明。读者可以直接跳到后面相应知识点章节阅读后再返回,也可以先有个印象,待学习到后面相关章节后再回头来看。

# 本书特色

笔者在大学时读过候捷(真名侯俊杰)写的一些 C++ 相关书籍,在他的《深入浅出MFC》一书中,有一句话我印象非常深 “唯有深入,方能浅出”。我非常认同这句话,对于一门技术,只有了解的深入,才能用最浅显、通俗的话语描述出。我在写作本书时,深入浅出就是一个主要目标。所以,本书的目标不仅是想告诉读者如何使用Flutter,而且也非常关注各个知识点的底层实现以及设计思想。从本书章节划分上来看,入门篇为“浅出”,进阶篇则是“深入”。另外由于PC客户端开发、移动开发、Web开发这些经验我都有,而Flutter本质上是一个UI系统,而UI系统的设计和实现在”大前端“下有很多相通之处,所以在本书中的一些知识点我也会对比一些其他UI系统(主要是 Android 或 Web)相应的实现,便于有相关开发经验的读者对比理解。

# 本书读者对象

  • 读者至少熟悉一种编程语言。
  • 读者最好接触过PC客户端、移动开发或Web前端开发中的一种。
  • 本书不适合做为编程的入门读物。

# 关于随书源码

由于当前处于草稿阶段,待本书正式发布后会上传随书源码。

# 权益

最后,知识是应该付费的,创作不易,开源不等于免费,如果您是本书读者并手头宽裕,可以点击下面打赏按钮打赏;当然,如果您囊中羞涩,您也可以阅读本书,但我对您有个小小的要求,希望您在阅读的过程中能积极参与到本书的纠错以及未完成内容的创作上来,也算是有所付出。

近来在网上发现很多原封不动复制本书的镜像网站和大量复制或引用了本书但未注明出处的博客、文章甚至书籍;对此,笔者在此声明,本书著作权归wendux所有,任何组织或个人在未经授权的情况下复制、拷贝、抄袭本书用于商业目的,笔者保留追究其法律责任的权利。如果是非商业目的的转载和引用,请注明出处并附上本书网址。另外如有出版机构愿意为本书出版实体书或者想转载本书内容,亦或是想合作,请加微信Demons-du.

# 勘误

由于Flutter SDK在不断更新,本书中的部分内容(如类的继承关系、参数等)可能会和新版本的Flutter不一致,读者以最新的Flutter SDK为准。另外,由于时间仓促,书中难免有错误之处,如果发现错误,可以在本书Github项目issue列表中去反馈,地址是https://github.com/flutterchina/flutter-in-action-2nd/issues 。

# 致谢

感谢一直以来支持Flutter中文网、Flutter开源项目的人以及所有对本书提过PR的同学;感谢请作者喝过咖啡的同学;感谢第一版的读者,正是因为有你们天天督促我更新我才有动力;另外本书第二版能够更新主要还得感谢我的儿子,正是因为他的降生我才有了一段完整的假期来进行第二版的更新,同时也感谢我的妻子,正是因为她能帮我看住儿子,我才能腾出手来更新。

请作者喝杯咖啡