Preface第2版前言

现在,主流的移动开发平台是Android和iOS,每个平台上的开发技术不太一样,针对每个平台开发应用需要特定的人员,但这样一来开发效率会变得低下,因而需要进行跨平台开发。跨平台技术从最开始的Hybrid混合开发技术,到React Native的桥接技术,一直在演进。

Hybrid开发主要依赖于WebView,但WebView是一个重量级的控件,很容易产生内存问题,而且复杂的UI在WebView上显示的性能不好。React Native技术抛开了WebView,利用JavaScript Core来做桥接,将JavaScript调用转为Native调用。React Native最终会生成对应的自定义原生控件。这种策略将框架本身和App开发者捆绑在系统的控件上,不仅框架本身需要处理大量平台相关的逻辑,随着系统版本变化和API的变化,开发者可能也需要处理不同平台间的差异,甚至有些特性只能在部分平台上实现,这使得跨平台特性大打折扣。

Flutter是最新的跨平台开发技术,可以横跨Android、iOS、MacOS、Windows、Linux等多个系统,还可以打包成Web程序运行在浏览器上。Flutter采用了更为彻底的跨平台方案,即自己实现了一套UI框架,然后直接在GPU上渲染UI页面。

笔者最早接触的跨平台技术是Adobe Air,写一套Action Script代码可以运行在PC、Android及iOS三大平台上。笔者与朋友开发视频会议产品,需要最大化地减少前端的开发及维护工作量,所以,我们先后考察过Cordova、React Native及Flutter等技术。我们觉得Flutter方案更加先进,效率更高,后来就尝试用Flutter开发了开源的WebRTC插件(可在GitHub上搜索Flutter WebRTC)。

写作本书的目的是传播Flutter知识(因为Flutter确实优秀),想在为Flutter社区做贡献的同时也为我们的产品打下坚实的技术基础。在写作本书的过程中,笔者查阅了大量的资料,使得知识体系扩大了不少,收获良多。


本书主要内容

第1章介绍Flutter的基本概念、状态生命周期、Flutter框架,并写第一个Flutter程序,来感受一下Flutter之美。

第2章介绍几个重要知识点,如入口程序、Material Design设计风格、Flutter主题、使用包资源、状态管理Provider使用、Http请求处理、Dio库的使用以及Json与数据模型处理。

第3章简单介绍Dart语言。Dart语言是Flutter SDK指定的语言,我们很有必要补充一下它的基础知识,包括语法特性、基本语句、面向对象等。

第4章介绍常用组件。Flutter里有一个非常重要的核心理念:一切皆为组件,本章主要讲解开发中用得最频繁的组件,如容器组件、图片组件、文本组件、图标组件和表单组件等。

第5章介绍Material Design风格的组件。Material Design风格是一种非常有质感的设计风格,并提供一些默认的交互动画。本章将分类介绍这些组件。

第6章介绍Cupertino风格的组件,这是一类iOS风格的组件,如CupertinoTabBar、CupertinoPageScaffold、CupertinoTabScaffold、CupertinoTabView等。

第7章介绍页面布局的基础知识和技巧,如基础布局处理、宽高尺寸处理、列表及表格布局等,最后通过一个综合布局示例来演示如何编写复杂的页面。

第8章介绍如何处理手势,如轻击、拖动和缩放等。Flutter中提供GestureDetector进行手势检测,并为手势检测提供了相应的监听。

第9章介绍如何加载、处理、展示资源和图片,如添加资源和图片、自定义字体等。

第10章介绍组件装饰和视觉效果的处理,如Opacity(透明度处理)、DecoratedBox(装饰盒子)、RotatedBox(旋转盒子)、Clip(剪裁处理)和CustomPainter(自定义画板)。

第11章介绍Flutter原生路由导航处理、Fluro企业级路由导航处理,还介绍了Key-Value(键值对)存储、文件存储以及Sqf lite等持久化操作。

第12章介绍动画的基本概念和原理,以及Flutter动画基础类的使用。通过字体放大动画、缓动动画、遮罩动画等示例详细介绍如何自定义动画。

第13章介绍Flutter插件开发的入门知识。Flutter插件可以和原生程序交互,比如调用蓝牙、启用WiFi、打开手电筒,等等。通过获取系统版本及电池电量插件的示例详细介绍了插件的基本开发步骤。通过加载网页插件示例详细介绍了Flutter与原生视图集成的方法。

第14章介绍开发工具及使用技巧,并介绍了几款常用的IDE工具,从代码的编写、辅助功能、程序调试、性能分析等多方面讲解工具及使用技巧。

第15章介绍测试与发布应用,包括测试应用、发布Android版和iOS版App。

第16章以实战案例为主。第一个综合案例介绍如何使用Flutter实现即时通信App的界面。第二个综合案例是实现一个企业站App,综合运用了前面的Flutter组件、布局、网络请求、Json处理、数据展示、状态管理、路由导航以及WebSocket等知识。


阅读建议

本书是一本基础入门加实战的书籍,既有基础知识,又有丰富的示例,包括详细的操作步骤,实操性强。由于Flutter大量使用组件,所以本书对组件的讲解很详细,包括基本概念、属性及代码示例。每个组件都配有小例子,力求精简,还提供了配套网站以提供完整代码,复制完整代码就可以看到效果,这样会增强读者的信心,在轻松掌握基础知识的同时快速进入实战。

如果你正在使用类似React Native等跨平台技术,那么学习Flutter会轻松很多。使用Flutter构建应用时,需要用到Android和iOS的相关知识,因为Flutter依赖移动操作系统提供众多功能和配置。Flutter是一种为移动设备构建用户界面的新方式,但它有一个插件机制可与Android和iOS进行数据及任务通信。本书第13章专门讲解Flutter的插件开发技术,可以作为进一步学习的起点。

Flutter引用了大量Web开发的知识,比如FlexBox布局方式、盒模型等,这些都引用了CSS中的一些思想。所以从UI界面的实现角度来说,只需要熟悉Dart语言就能轻松上手Flutter。本书第3章专门介绍Dart语言的基础知识。

建议读者在一开始先把第1~3章介绍的基础理论通读一遍,到第4章时实际操作并运行每个例子,这样就能开发最简单的Flutter界面了。

第5章和第6章通读即可。第7章介绍的构建页面布局都是开发中常用的布局方法,建议读者仔细阅读、实际操作并运行每个例子,尤其是最后的布局综合例子,按步骤执行一遍,就能理解布局的思路。

第8~11章涵盖Flutter的高级用法,在开发中也经常使用。可以根据实际项目开发和学习的需要阅读。

第12章介绍Flutter动画开发。动画可提升用户体验,读者可以先阅读动画的理论知识,然后尝试自定义一个简单动画,最后熟悉Flutter自带的动画组件。

第13章介绍Flutter插件开发。这需要具备原生开发的知识,比如Java、Objective-C等相关知识。本章对读者的综合编程能力要求较高,需要掌握多门语言及多平台技术。如果读者不需要开发插件,可以略过本章。

第14~15章实操性很强,读者只要根据书中的步骤仔细操作,就能快速掌握。

第16章的两个综合案例,建议读者按书中步骤逐步实现,同时理解项目的代码组织结构,这样才能胜任实际项目的开发工作。


关于随书代码

本书所列代码力求完整,但限于篇幅,书中没有给出全部代码。完整代码可参见以下网址:

http://www.flutter100.net

https://github.com/kangshaojun


致谢

首先感谢机械工业出版社吴怡编辑耐心指点,以及推动了本书的出版。

感谢我的朋友段维伟工程师,江湖人称“鱼老大”,国内骨灰级WebRTC开发者、视频会议产品合作者。在这里感谢鱼老大的技术分享及帮助。

感谢陈波和陈志红两位好友。在我交稿压力最大的时候,他们从内容安排及语言润色方面都提供了一些非常有用的建议。还要感谢高文翠和黄菊华老师针对本书大纲所给出的指导。

最后还要感谢我的家人。感谢我的母亲及妻子,在我写作的过程中承担了全部家务并照顾孩子,使我可以全身心地投入写作。

亢少军

2019年10月5日