前言 近些年来,利用跨平台技术来开发App无论在移动端还是桌面端都备受欢迎。开源的跨平台框架也是百花齐放,Flutter是最新的跨平台开发技术,可以横跨Android、iOS、macOS、Windows、Linux等多个系统。Flutter还可以打包成Web程序运行在浏览器上。Flutter采用了更为彻底的跨平台方案,即自己实现了一套UI框架,然后直接在GPU上渲染UI页面。 笔者最早接触的跨平台技术是Adobe Air技术,写一套Action Script代码可以运行在PC、Android及iOS三大平台上。目前,笔者与朋友开发视频会议产品及开源项目,需要最大化地减少前端的开发及维护工作量,所以,我们先后考察过Cordova、React Native及Flutter等技术。我们觉得Flutter方案更加先进,效率更高,后来就尝试用Flutter开发了全球第一个开源的WebRTC插件(可在GitHub上搜索Flutter WebRTC)。 Flutter的开发语言是Dart,所以本书重点介绍与Dart语言相关的知识。出版本书的目的是想传播Flutter知识(因为Flutter确实优秀),想在为Flutter社区做点贡献的同时也为我们的产品打下坚实的技术基础。通过编写本书,笔者查阅了大量资料,使得知识体系扩大了不少,收获良多。 本书是《Dart语言实战——基于Flutter框架的程序开发》的第2版,第1~14章配套了教学视频,并新增了Dart本地库、系统内置库以及第三库的使用方法,以及Dart持久化的几种方式等内容。 商城项目实战篇采用FlutterSDK自带库方案,减少对第三方库的依赖,使得项目更加轻量化。商城架构改为Flutter+Node+React+MySQL,采用真实接口开发。使用HttpClient为封装网络请求服务,替代第三方库Dio。编写消息派发库Call,替代第三方事件通知库EventBus。路由工具使用Flutter框架自带路由,替代第三方库Fluro。使用EasyRefresh上拉刷新组件,并添加分页处理逻辑。 本书主要内容 第1章介绍Dart语言简介,介绍Dart语言的发展及能够支持的平台。 第2章介绍Dart语言的两个开发环境搭建过程,包括Windows及macOS的开发环境搭建。 第3章简单介绍如何使用IDE在Flutter环境下运行第一个Dart程序。 第4章介绍Dart语言的语法基础,包括关键字、变量和常量等。 第5章介绍Dart语言的编码规范,包括样式规范、文档规范及各种使用规范。 第6章介绍Dart语言的常用数据类型,包括数字、字符串、List、Map及Set类型的定义及使用方法。 第7章介绍Dart语言的运算符,包括算术、关系、逻辑、类型检测及级联操作符。 第8章介绍常用的流程操作语句,包括条件分支、循环语句及断点Assert等。 第9章介绍函数的构造函数定义、参数传递方法、可选参数的使用及匿名函数的使用方法等。 第10章介绍面向对象的基本概念、类的声明、成员变量与成员方法,以及枚举类型等相关知识。 第11章介绍对象的创建与使用,以及Dart语言里各个构造方法的定义及使用。 第12章介绍继承与多态,通过示例详细讲解方法重写的知识点。 第13章介绍抽象类和接口的概念,以及如何声明抽象类与接口,如何实现抽象类和接口。 第14章介绍Dart语言里Mixin(混入)的概念及特性、Mixin的使用、重命名方法处理以及Mixin对象类型。 第15章介绍Dart异常的概念,抛出异常及捕获异常的使用方法。同时介绍如何自定义异常并使用。最后通过Http异常处理的实例综合运用异常。 第16章介绍集合的概念。详细介绍Dart语言中List、Set及Map等常用集合的概念及使用方法。 第17章介绍泛型的概念及作用。通过示例详解介绍泛型在集合、类、抽象类和方法里的使用方法。 第18章介绍单线程与多线程的概念、事件循环机制、Future概念及异步处理,同时介绍Stream概念及Bloc设计模式,另外还介绍Isolate的高级用法。 第19章通过多个示例详细介绍Http网络请求、Dio网络请求及WebSocket的用法。 第20章介绍元数据定义、常用元数据和自定义元数据。另外通过Json生成实体类的方法详细介绍元数据的应用场景。 第21章介绍常用开发库及第三方库的使用,如库的导入、导出、命名与拆分等。 第22章详细阐述Flutter持久化的处理方法,如文件存储、共享变量及本地数据库操作。 第23章通过Canvas的接口使用详细介绍Flutter里画布操作的API使用方法。 第24章介绍Flutter Web开发的流程及具体步骤,另外介绍第三方库选取注意的事项。 第25章对商城项目进行一个总体的功能介绍,使用的前端技术、后端技术、后台管理技术及使用的数据库。同时详细讲解后端及数据库的安装步骤。 第26章介绍商城项目创建、项目框架搭建、目录结构分析,以及项目的数据流程分析等内容。 第27章介绍商城项目的颜色、图标、字符串和数据接口等配置项。 第28章介绍商城项目中用到的工具,如路由工具、Token处理工具、随机数工具及颜色转换等工具。 第29章介绍商城项目中用到消息通知类的实现方法,另外通过Flutter自带的HttpClient实现Http请求库的方法。 第30章介绍商城项目中封装的组件,如大中小按钮、圆形复选框、输入框及弹出消息组件等。 第31章介绍商城项目的入口程序与首页处理,包括入口程序、首页拆分、首页分类、首页商品及轮播图等内容。 第32章介绍商城项目的分类模块的数据模型、数据接口、一级分类组件、二级分类组件及分类页面组装的实现过程。 第33章介绍商城项目用户数据模型,以及登录注册页面实现过程。还分析了token的获取与使用。 第34章介绍商城项目中商品详情复杂页面布局、商品相关的数据模型、数据接口及添加至购物车的实现过程。 第35章介绍商城项目中的购物车模块实现过程,同时讲解了购物车与其他模块的关系以及购物商品数量组件的使用。 第36章介绍商城项目中订单列表及订单详情的实现过程,同时详细介绍订单状态及订单详情复杂页面的布局。 第37章介绍商城项目中个人中心实现的过程,同时介绍个人中心页面与其他页面的关系。 阅读建议 本书是一本基础入门加实战的书籍, 既有基础知识, 又有丰富示例, 包括详细的操作步骤, 实操性强。由于Dart语言内容较多, 所以本书对Dart语言的基本概念讲解很详细, 包括基本概念及代码示例。每个知识点都配有小例子, 力求精简, 还提供完整代码, 读者复制完整代码就可以立即看到效果。这样会给读者信心, 在轻松掌握基础知识的同时能够快速进入实战。 本书共分4篇, 建议读者先把第1篇Dart语言的基础理论通读一遍, 并搭建好开发环境, 在第3章编写出第一个 Dart 程序。 第2篇是Dart语言面向对象的一些知识, 掌握这一部分内容可以写出结构清晰的程序,同时还能掌握Dart语言的Mixin(混入)等特性。 第3篇属于Dart进阶内容, 包括异常处理、集合及泛型的使用。这里的异步编程属于 Dart 的核心知识, 可通过示例详细了解 Bloc 设计模式及程序是如何解耦的。 第4 篇属于项目实战部分, 读者在掌握了前面的基础知识后, 可以通过一个商城案例项目来全面掌握Flutter的开发过程。这里建议读者在开发过程中, 如果遇到不熟悉的组件或者第三方库, 则可以先运行小示例后再进行使用。 关于随书代码 本书所列代码力求完整,但由于篇幅所限,代码没有全放在书里。完整代码可扫描下方二维码下载。 本书源代码 致谢 首先感谢清华大学出版社赵佳霓编辑的耐心指点,以及推动本书的出版。 还要感谢我的家人,尤其感谢我的母亲及妻子,在我写作过程中承担了全部的家务并照顾孩子,使我可以全身心地投入写作之中。 由于时间仓促,书中难免存在不妥之处,请读者见谅,并提宝贵意见。 亢少军 2021年10月