内容简介
本书通过一个实际的Flutter App,为大家介绍Flutter相关的知识。书中首先介绍了Flutter的环境配置、各种IDE的工具配置以及怎样运行一个□简单的Flutter 程序。然后介绍了Dart语言的一些基本概念。接着利用Flutter基本的容器组件、图片组件以及布□组件,教读者创建一个简单的待办事项应用的原型界面,并介绍Flutter UI的布□思路以及原理。□后,介绍如何通过更加复杂的组件的不同组合,让待办事项应用识别复杂的手势以及在精妙的动画和页面之间完成路由跳转。
目录
□ □部分 Flutter 的基础知识□ □章 Flutter 概述 □1.1 Flutter 的横空出世 □1.1.1 Flutter 的前身——Sky □1.1.□ Flutter 版本的历史 □1.□ Flutter 的技术亮点 41.□.1 台的精美设计 41.□.□ 台的高生产力 61.□.3 台的表现 71.□.4 可扩展的开台 71.3 小结 8第 □章 Dart 语言概述 9□.1 基本数据类型 9□.1.1 数字 9□.1.□ 字符串 10□.1.3 布尔 10□.1.4 列表 10□.1.5 集合 11□.1.6 映射 11□.□ 函数 1□□.□.1 声明 1□□.□.□ 参数 1□□.□.3 13□.□.4 main 函数 14□.□.5 匿名函数 14□.3 流程控制 14□.3.1 利用 if 来判断 15□.3.□ 利用 for/while 来循环 15□.3.3 利用 switch 来选择 16□.4 异常处理 16□.4.1 抛出异常 16□.4.□ 捕获异常 17□.4.3 使用 finally 保证代码被执行 17□.5 类 18□.5.1 类的成员□量 18□.5.□ 类的构造方法 19□.5.3 使用 getter 和 setter □0□.5.4 继承 □0□.5.5 抽象机制与抽象类 □1□.5.6 隐式接口 □1□.5.7 继承之外的另一种选择:mixin □□□.6 泛型 □3□.6.1 泛型与类型 □3□.6.□ 在定义中使用泛型 □4□.6.3 在函数中使用泛型 □4□.6.4 限定泛型的类型 □5□.7 异步 □5□.7.1 什么是异步 □5□.7.□ Future 对象与 async/await 关键字 □5□.7.3 使用 async for 处理 Stream 对象 □6□.8 引入外部代码 □7□.8.1 利用 import 关键字引入其他框架中的代码 □7□.8.□ 利用 as 关键字防止外部框架冲突 □7□.9 小结 □8第3章 环境搭建 □93.1 在 Windows 系统搭建环境 □93.1.1 下载开发工具 Android Studio □93.1.□ 搭建 Android 开发环境 313.1.3 安装 Flutter SDK 343.□ 在 Mac 系统搭建环境 353.□.1 下载开发工具 Android Studio 353.□.□ 搭建 Android 开发环境 363.□.3 搭建 iOS 开发环境 373.□.4 安装 Flutter SDK 393.3 小结 39第4章 着手做□ □个 Flutter 程序 404.1 □ □个 Flutter 项目 404.□ Flutter 项目的文件结构 4□4.3 小结 43第5章 调试工具 445.1 如何使用断点 445.1.1 普通断点与条件断点 445.1.□ step in 和 step over 465.□ HotReload 和 HotRestart 465.□.1 使用 HotReload 加快 UI 开发 475.□.□ 理解 HotRestart 475.3 使用 Android Studio 中的 DevTools 475.3.1 使用 Flutter Inspector 查看 UI 结构 485.3.□ 使用 Flutter Outline 查看代码结构 505.4 小结 50第6章 Widget 概述 516.1 Widget 的概述 516.1.1 文本展示:Text 组件 5□6.1.□ 文本输入:TextField 组件 576.1.3 图片展示:Image 组件 586.1.4 处理点击:Button 组件 606.□ 利用 Widget 实现布□ 6□6.□.1 布□容器:Container 6□6.□.□ 弹盒子布□:Flex、Row、Column 和 Expanded 646.□.3 流式布□:Wrap 和 Flow 7□6.□.4 层叠布□:Stack 和 Position 766.3 滚动布□ 786.3.1 单列内容滚动:ListView 786.3.□ 展示多列内容:GridView 836.4 Material 与 Cupertino 896.4.1 通用样式 Widget 一览 896.4.□ Material 的样式 Widget 一览 916.4.3 Cupertino 的样式 Widget 一览 936.5 小结 94部分 动手做一个待办事项应用第7章 我们要做一个什么样的应用 967.1 页面一览 967.□ 整体技术点一览 100第8章 □ □个页面——“登录”页面 10□8.1 搭建 UI 框架 1038.1.1 创建登录页面文件 1038.1.□ 搭建整体结构 1048.1.3 布□文本框组件 1068.1.4 继续完善细节 1098.□ 填充组件 1138.□.1 填充图片组件 1138.□.□ 填充邮箱和密码输入框 1178.□.3 登录按钮与注册提示按钮 1178.3 为页面增加本地逻辑 1□38.3.1 处理键盘遮挡问题 1□38.3.□ 处理焦点 1318.3.3 为文本输入框增加校验逻辑 1368.4 小结 138第9章 跳转到个页面 1399.1 简单的页面跳转 1399.1.1 Navigator 初探:简单的路由跳转 1409.1.□ Navigator 再探:命名路由 1439.1.3 Navigator 终探:路由传参 1449.□ 为页面跳转添加自定义的过渡效果 1469.□.1 实现渐□的页面过渡 1469.□.□ 了解页面过渡的原理 1479.3 完善我们的“注册”页面 1509.3.1 处理 “注册”页面中的用户头像 1519.3.□ 处理“登录”页面与“注册”页面之间的跳转逻辑 1559.4 小结 156□ □0章 待办事项应用的灵魂——“列表”页面 15710.1 构建带有 BottomNavigationBar 的页面 15710.1.1 创建 BottomNavigationBar 15810.1.□ 使用 StatefulWidget 完成页面转换 16310.1.3 用正确的方式构建 body 16510.□ 使用 ListView 构建页面 16910.□.1 准备数据 16910.□.□ 用 ListView 展示待办事项 17310.3 为 ListView 增加简单的事件交互 17810.3.1 为待办事项添加事件回调 17810.3.□ 添加事件回调的具体逻辑 18010.3.3 完善列表的排能 18310.4 小结 186□ □1章 添加、编辑、查看 TODO——待办事项编辑页 18711.1 构建简单的表单页面 18711.1.1 搭建页面框架 18711.1.□ 封装带有标题的 LabelGroup 组件 18911.1.3 构建待办事项的标题和描述文本框 19111.□ 构建较为复杂的日期选择器组件和时间选择器 19511.□.1 了解 DatePicker 和 TimePicker 19611.□.□ 封装日期选择器和时间选择器 19811.□.3 构建日期选择器和时间选择器 □0011.3 构建优先级展示框 □0411.3.1 实现优先级展示框 □0411.3.□ 实现优先级弹出菜单 □0611.4 完善表单细节内容 □0911.4.1 完善表单中的细节内容 □0911.4.□ 将新创建的待办事项添加到列表中 □1011.5 小结 □13□ □□章 让我们的应用更加 □141□.1 了解 Flutter 中的动画 □141□.1.1 Animation 类 □141□.1.□ AnimationController 类 □161□.1.3 CurvedAnimation 类 □171□.1.4 Tween 类 □181□.□ 动手为我们的待办事项应用增加动画 □191□.□.1 为“登录”页面增加动画 □191□.□.□ 使用 AnimatedWidget 封装动画 □□11□.□.3 为登录 Logo 增加 Hero 动画 □□41□.□.4 为“列表”页面增加动画 □311□.3 利用 PlatformChannel 实现定能 □341□.3.1 了解 PlatformChannel 的基本模式 □341□.3.□ 使用 PlatformChannel 写 Dart 端代码 □351□.3.3 使用 PlatformChannel 编写 Android 端代码 □391□.3.4 使用 PlatformChannel 编写 iOS 端的代码 □401□.4 利用 PlatformView 实现地址详能 □411□.4.1 了解 PlatformView 的基本模式 □411□.4.□ 在 Dart 端使用 PlatformView □4□1□.4.3 在 Android 端注册 PlatformView □451□.4.4 在 iOS 端注册 PlatformView □461□.5 使用封装好的 PlatformView 构建隐私策略页面 □481□.5.1 引入 webview_flutter □491□.5.□ 使用 webview_flutter □491□.6 小结 □51□ □3章 为我们的待办事项应用增加完整的处理逻辑 □5□13.1 完成多页面之间的数据共享 □5□13.1.1 利用公共父页面共享数据 □5□13.1.□ 同步数据□化 □5413.□ 为“登录”页面和“注册”页面增加网络请求 □5713.□.1 的基础知识 □5813.□.□ 利用我们提供的服务器完成网络请求 □5913.□.3 使用 模块发送网络请求 □6013.3 将数据缓存在本地 □6613.3.1 保存登录状态 □6613.3.□ 保存列表信息 □6913.4 将本地数据上传到网络 □7413.4.1 将数据上传到服务器 □7413.4.□ 从服务器获取数据 □7713.5 小结 □81□ □4章 是时候发布啦 □8□14.1 发布应用前需要了解的一些基础知识 □8□14.□ 发布 Android 应用 □8314.□.1 在各台注册账号 □8314.□.□ 发布前检查 □8314.□.3 修改 Icon □8414.□.4 配置应用发布签名 □8614.3 发布 iOS 应用 □9014.3.1 加入苹果公司的计划 □9014.3.□ 发布前检查 □9014.3.3 更改 Icon 和启动图 □9114.3.4 创建应用的归档 □9314.3.5 将应用发布到 App Store □9514.4 小结 □95第三部分 Flutter 的扩能□ □5章 深入理解状态管理 □9815.1 状态管理的理论知识 □9815.1.1 什么是状态管理 □9815.1.□ Flutter 中的状态管理 30015.□ 状态管理的代码实现 30115.□.1 了解如何使用 InheritedWidget 30115.□.□ InheritedWidget 的原理 30315.□.3 使用 Provider完成状态管理 30615.3 小结 308□ □6章 你不能错过的工具 30916.1 代码静态分析 30916.1.1 了解 IDE 中的 Dart Analysis 30916.1.□ 了解 Dart Analysis 的配置规则 31016.□ 代码格式化 31□16.3 Dart DevTools 31416.3.1 在 IDE 中打开 Dart DevTools 31416.3.□ 使用 Timeline 查看应用的能损耗 31616.3.3 使用 Memory 查看应用的内存占用情况 31716.4 小结 317□ □7章 在 Flutter 中如何更好地与后台交互 31817.1 数据处理概览 31817.1.1 将 JSON 数据解析为 Map 数据 31817.1.□ 手动创建模型类处理 JSON 数据 31917.□ 使用工具生成代码 31917.□.1 使用 json_serializable 生成代码 31917.□.□ 了解 json_serializable 的更能 3□117.3 小结 3□4□ □8章 编写测试代码 3□518.1 准备工作 3□518.1.1 添加依赖 3□518.1.□ 创建测试文件 3□618.□ 单元测试 3□618.□.1 编写测试代码 3□618.□.□ 使用 Mockito 模拟测试环境 3□718.□.3 运行单元测试 3□918.3 Widget 测试 33018.3.1 编写测试代码 33018.3.□ 运行 Widget 测试 33□18.4 集成测试 33□18.4.1 添加集成测试的依赖 33318.4.□ 创建集成测试文件 33318.4.3 启动被集成应用 33418.4.4 编写集成测试代码 33418.4.5 记录能数据 33518.4.6 运行集成测试 33618.5 小结 336□ □9章 能优化 33719.1 能优化建议 33719.1.1 控制 build 方法耗时 33719.1.□ 控制耗时 33819.1.3 长列表优化 33819.1.4 避免跳帧 33819.□ 能分析 33919.□.1 通过 profile 模式做能分析 33919.□.□ 发现问题 34019.□.3 GPU 耗时分析 34□19.□.4 UI 耗时分析 34319.□.5 Widget 重建分析 34319.□.6 建立指标 34419.3 小结 344第 □0章 Flutter 的历程与未来 345□0.1 回顾 Flutter 的历程 345□0.□ 展望 Flutter 的未来 346□0.3 Flutter for Web 347□0.3.1 简述 347□0.3.□ 构建环境 348□0.3.3 使用 Web 运行待办事项应用 348□0.3.4 初窥 flutter-web 349□0.4 Flutter For Desktop 351□0.5 小结 35□