# 第二版序

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

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

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

# 第二版变化

主要有以下变化:

  • 基于 Flutter 3.0。
  • 有 60% 的内容进行了修改和重构,添加了更多的示例,对部分章节的顺序进行了调整,使学习的梯度更加合理,以期能够循序渐进的帮助读者了解Flutter。
  • 进阶篇中对Flutter中相对较深但很重要的内容进行了深入介绍,比如可Sliver布局协议、渲染相关的 Layer 以及通过定义 RenderObject 的方式来定义组件。
  • Flutter 核心原理一章进行了重写,不再只是停留在文字介绍,同时添加了很多实例来辅助理解Flutter 的布局、绘制等原理。
  • 本书内容更聚焦于flutter技术本身,删除了一些和具体平台相关的内容,比如Android和iOS的插件开发,以及如何进行原生+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的基本用法,也包含了对Flutter的设计思想及底层实现原理的探讨。从本书章节划分上来看,入门篇为“浅出”,进阶篇则是“深入”。

另外,笔者认为前端和后端开发的本质区别是:前端主要是面向UI,而后端则主要是面向业务逻辑和数据,前端开发基本都会在一个UI框架(术语“UI框架”在本书中指基于某个平台实现的能快速开发用户界面的框架)之下进行的。虽然不同的UI框架的开发语言及开发模式不同,但不同UI框架的底层设计思想和实现原理上又有诸多相通之处,因此,在学习某一个具体的UI框架时如果能够对比其它UI框架则有利于我们对“大前端”开发技术进行融汇贯通和举一反三。由于笔者一直从事大前端相关开发工作,对PC客户端开发、移动开发以及Web开发都比较熟悉,且Flutter本质上正是一个UI框架,所以本书的另一个特色就是会将Flutter和其他UI系统(主要是 Android 或 Web)进行对比,帮助读者对不同UI框架底层共性的东西有一个贯通的理解

# 本书读者对象

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

# 关于随书源码

  • 本书示例代码见:随书源码 (opens new window)

  • 由于本书实例中实现了不少通用性较强的组件,为了方便复用,笔者将通用性较强的组件都添加到了 flukit (opens new window) 开源项目,它是笔者维护的一个flutter开源组件库。

# 权益

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

近来在网上发现很多原封不动复制本书的镜像网站和大量复制或引用了本书但未注明出处的博客、文章甚至书籍,对此,笔者在此声明,本书著作权归wendux所有,任何组织或个人在未经授权的情况下复制、拷贝、抄袭本书用于商业目的,笔者保留追究其法律责任的权利。如果是非商业目的的转载和引用,请注明出处及作者信息并附上本书网址。

# 勘误

由于Flutter SDK在不断更新,本书中的部分内容(如类的继承关系、参数等)可能会和新版本的Flutter不一致,读者以最新的Flutter SDK为准。另外,由于时间仓促,书中难免有错误之处,如果发现错误,可以在本书Github项目issue列表 (opens new window)中去反馈 。另外你也可以关注本书电子版官网(https://book.flutterchina.club),电子版会定期修正错误及更新内容。

# 致谢

感谢一直以来支持Flutter中文网、Flutter开源项目的人以及所有对本书提过PR的同学;感谢请作者喝过咖啡的同学;感谢第一版的读者,正是因为有你们天天督促我更新我才有动力;最后感谢所有支持我的人。

请作者喝杯咖啡