当前位置: 首页 > news >正文

学习就像一场旅行,12天带你玩转Flutter之旅

新书速递

 

本书从一个Android原生开发者的角度去认识和了解Flutter,作者以幽默生动的故事描写手法,记录在Flutter学习中所遇见的景色,并呈现给读者,主要内容包括:Flutter的安装与基本概念,Dart语法、组件与容器、布局基础、动画与手势、自定义组件、资源与路由、Flutter框架、Flutter与Redux、Flutter与iOS、插件开发、综合案例等。

 

 

本书主要想让初学者对Flutter有一个比较全面的认识。我觉得一次学习过程就像一次旅行,对我们要去的地方从全然不知,到渐渐熟悉,当我回首时,发现这一路的成长中包括了困惑、犹豫、兴奋、痛苦、快乐。现在,我又回到了起点,背起行囊带你一起出发,一点点去认识Flutter。

 

精彩抢先看

旅途之初,我会为你备好行囊和工具:介绍Debug和开发工具,然后介绍Dart语言和基础的组件使用。本书介绍了很多实用的组件,以及动画、路由,还介绍了一些Flutter框架渲染层的知识和相关源码,虽然不是非常深入,但会让你对Flutter的了解更加深入。本书还包括数据的处理和状态管理、异步处理、数据库操作等,最后介绍了插件和混合开发。

如何开启12天的Flutter之旅

我在写作时更想专注于Flutter技术本身,希望让你在每一页都能学到东西。我还想向你分享一些我的思考方式和对问题的见解。另外,书中有大量的图片、类比的手法,相信你在读书过程中不会觉得太无趣。希望让你有种背上行囊随我旅行12天,我们共同见证、欣赏Flutter世界的感觉。

D1

初识Flutter与技能储备。首先,重新认识Flutter初始项目,并在此基础上提出两个问题,借这两个问题来介绍Debug的使用方法。然后,介绍Android Studio中针对Flutter的实用工具,“磨刀不误砍柴工”,把“拖鞋”换成“运动鞋”再开始旅行。最后,分享一些关于Flutter中Widget的见解,从整体上先感受一下Widget,再说明组件抽离的必要性,不要把所有鸡蛋(组件)放在同一个篮子(文件)里。

D2

Dart实用语法速览。Dart作为新时代的编程语言,有着优秀且优雅的语法。本章分别从基础语法、面向对象和Dart特殊语法三个层面展开对Dart语法的介绍,并结合实际使用以及源码来学习。

D3

界面风格和简单绘制。介绍Flutter中的两种界面风格,以及一个简单的App界面如何搭建。对Flutter的视图层有一个整体的认知将为之后的学习打下基础。另外,还介绍Flutter中的简单绘制,可以看出Android等其他平台的绘制技能在Flutter中完全适用。

D4

基础Widget。首先通过基础的图文组件介绍属性的使用,以及批量制作某属性的对比图,让你摆脱“属性黑洞”的束缚。然后以图解的形式对容器组件和多子组件进行介绍,使你更直观地认识各个属性的作用,进而掌握基本的布局功能。

D5

列表与滑动。首先讲述如何将一个组件抽离,封装成条目以供列表使用,再通过ListView填充数据展现条目,通过一个聊天界面介绍如何实现下拉和上拉的功能。然后对滑动控制器和其他滑动进行介绍,如单子滑动组件和GridView、PageView以及Sliver家族。

D6

动画与路由。详细介绍在Flutter中如何实现动画,从一开始的运动盒到可以动态变化的n角星,努力揭示了动画的本质。然后介绍如何简化和封装组件,让动画更加强大、好用。本章介绍路由的跳转、传参、回参、管理、动画等知识,将路由放在这里是因为路由与动画有所关联,掌握这些知识就可以创建一个相对复杂的界面系统。

D7

手势组件与自定义组件。如果一个组件经常被用到,或者可以独立于项目之外分享给很多人用,那么封装成一个自定义组件是很好的方式。本章先简单介绍Flutter中手势的处理,并自定义一个手写板,然后通过原生组件实现自定义组件;通过绘制组件可以了解如何在Flutter的画板上绘制文字和图片,以及进行一些复杂的数学计算。

D8

Flutter渲染机制。本章将深入Flutter框架层的源码中,谈论Widget、RenderObject、Element三棵树,介绍Flutter的main函数是如何运行的,以及Element的加载流程,最后全面介绍State及其生命周期。

 

D9

Day 9:异步与资源。本章将介绍异步与流这个强大武器,并通过文件的操作加深对两者的理解。然后介绍Flutter网络请求的方式以及对数据资源的处理方式。

D10

数据共享与状态管理。本章先介绍数据传输中InheritedWidget的解决方案,然后介绍状态管理的处理过程以及FutureBuilder和StreamBuilder的用法,最后介绍BLoC、Provider、Redux三个状态管理工具及其使用案例。

D11

数据持久化和读取。本章分别从数据库、json数据文件、XML配置文件来介绍如何进行持久化处理,并介绍如何访问数据库,查询结果并填充界面,并通过界面完成增、删、改、查操作。

D12

插件及混合开发。首先介绍Flutter和原生平台的通信机制,之后介绍几个常用的插件,包括路径和权限申请、音频播放、视频播放、图片拾取、Web页面,最后介绍Flutter与原生平台的混合开发。

 

Flutter的旅程即将开始,试着深呼吸一下,和我一起出发吧,去见证Flutter的奇妙世界!

作者简介

张德立(张风捷特烈) 

笔名“张风捷特烈”,编程技术爱好者。喜欢分享技术知识,在技术社区发布过大量受欢迎的技术文章。喜欢Flutter框架,是开源项目FlutterUnit的作者。参与过多个前端项目和Android项目的开发,有探索精神,对新技术保持兴趣和热情。

 

目录

Day 1 初识Flutter与技能储备1

1.1Flutter初始项目分析1

1.1.1Flutter初始项目结构1

1.1.2 入口文件及MyApp分析2

1.1.3MyHomePage与_MyHomePageState分析5

1.1.4pubspec.yaml文件6

1.2 基本Debug技能7

1.2.1 断点和放行7

1.2.2 变量查询和唤醒程序8

1.2.3Debug要点补充9

1.3 辅助技能储备10

1.3.1 三个实用工具10

1.3.2 片段代码和快速重构12

1.3.3 三个基础知识QA14

1.4Widget知识储备15

1.4.1 命令式UI编程与声明式UI编程16

1.4.2 认识Widget体系16

1.4.3Widget源码初识18

1.4.4 组件的提取抽离21

 

Day 2Dart实用语法速览23

2.1 基础语法23

2.1.1 常用的数据类型23

2.1.2 变量与常量26

2.1.3 函数的使用27

2.2 通过Size类看Dart中的面向对象30

2.3 其他语法点34

2.3.1 常用符号与关键字34

2.3.2 库的使用和可见性35

2.3.3 泛型36

2.3.4 异步37

2.3.5 异常处理38

 

Day 3 界面风格和简单绘制39

3.1Material风格40

3.1.1Scaffold和BottomNavigationBar40

3.1.2  TabBar和TabBarView41

3.1.3  标题栏按钮和菜单组件42

3.1.4  弹出对话框43

3.1.5  界面的左右滑页43

3.1.6  showSnackBar和showBottomSheet44

3.2  Cupertino风格45

3.2.1  CupertinoPageScaffold和CupertinoTabScaffold46

3.2.2  CupertinoNavigationBar和CupertinoTabBar46

3.2.3  CupertinoTabView47

3.2.4  CupertinoAlertDialog和showCupertinoModalPopup47

3.3 认识CustomPainter绘制49

3.3.1 绘制网格49

3.3.2  Canvas初级绘制50

3.3.3  移植绘制n角星52

3.3.4  移植绘制粒子数字54

 

Day 4 基础Widget56

4.1  Text组件56

4.1.1  Text的基本使用56

4.1.2  Text的阴影和装饰线57

4.1.3  文字方向、对齐和溢出处理58

4.1.4  RichText的使用59

4.1.5  RichText与Text.rich60

4.2Image组件60

4.2.1Image资源的加载61

4.2.2  图片的适应模式62

4.2.3  图片颜色及混合模式63

4.2.4  图片对齐模式及重复模式63

4.2.5  用centerSlice实现图片局部放大64

4.3Container的使用65

4.3.1  Container的基本使用65

4.3.2Padding的使用66

4.3.3  Container的边线装饰66

4.3.4  Container的约束和变换67

4.3.5Container与布局的渊源68

4.4 常用多子布局71

4.4.1  图解Flex布局71

4.4.2Stack布局75

4.4.3Wrap包裹布局76

 

Day 5 列表与滑动79

5.1 组件封装79

5.1.1 静态布局79

5.1.2 头像组件封装80

5.1.3 条目组件封装81

5.1.4 封装聊天信息组件82

5.2ListView的使用84

5.2.1 基本用法85

5.2.2ListView的构造及分隔线85

5.2.3ListView的不同样式87

5.2.4ListView的上拉与下拉87

5.3 常用滑动组件90

5.3.1 单子滑动组件SingleChildScrollView90

5.3.2 滑动控制器ScrollController92

5.3.3 滑页组件PageView94

5.3.4 网格组件GridView97

5.4Sliver家族99

5.4.1SliverAppBar的使用100

5.4.2Sliver中的列表布局、网格布局及普通布局101

5.4.3 吸顶效果SliverPersistentHeader103

 

Day 6 动画与路由106

6.1 动画闲谈106

6.1.1FPS106

6.1.2 动画控制器AnimationController107

6.1.3 运动盒108

6.2Flutter动画详解111

6.2.1Animation和Animatable111

6.2.2 动画状态监听和Animation方法116

6.2.3 动画简化和封装117

6.2.4 封装强化版FlutterContainer118

6.3 路由与导航122

6.3.1 打开路由122

6.3.2 路由的传参125

6.3.3 路由的跳转动画128

6.3.4Hero跳转动画130

 

Day 7 手势组件与自定义组件132

7.1 手势组件与使用132

7.1.1InkWell水波纹的使用132

7.1.2GestureDetector的使用133

7.1.3 手写板的实现135

7.2 根据现有组件实现自定义组件137

7.2.1 切换Widget组件137

7.2.2 颜色选择圆钮组件ColorChooser139

7.2.3 函数运动组件MathRunner142

7.3 绘制自定义组件143

7.3.1 能力分析组件AbilityWidget143

7.3.2 图片放大组件BiggerView147

7.3.3 波纹线RhythmView150

 

Day 8Flutter渲染机制153

8.1 认识三棵树153

8.1.1 漫谈Widget、Element、RenderObject154

8.1.2 认识RenderObject和Element156

8.1.3 三棵树结构158

8.1.4 三个根结点的初始化159

8.2Element的装配162

8.2.1RenderObjectToWidget-Element的装配162

8.2.2StatelessElement和StatefulElement的装配164

8.2.3 多子元素挂载166

8.3State类全解析168

8.3.1State的生命周期回调169

8.3.2State切换和跳转时生命周期测试173

8.3.3setState做了什么175

 

Day 9 异步与资源178

9.1 认识异步与流178

9.1.1Dart中的异步任务178

9.1.2Dart中的流181

9.2 文件中的异步与流184

9.2.1 文件的简单操作184

9.2.2 文件读写的异步操作186

9.2.3 文件读写的流操作188

9.2.4 使用文件打造图标转换工具190

9.3 网络请求与json解析193

9.3.1 使用GitHub开放API 测试网络访问193

9.3.2json解析197

9.3.3 异步方法的基本使用199

 

Day 10 数据共享与状态管理202

10.1 数据共享和参数传递202

10.1.1 数据共享的传统实现方式202

10.1.2 用InheritedWidget实现数据共享204

10.2 状态管理的原始处理过程207

10.2.1 数据准备与界面说明207

10.2.2FutureBuilder与StreamBuilder的使用209

10.3 使用插件进行状态管理213

10.3.1BLoC对数据状态的管理213

10.3.2Provider对数据状态的管理219

10.3.3Redux对数据状态的管理225

 

Day 11 数据持久化和读取230

11.1Flutter中的数据库存储230

11.1.1 数据库的初始化231

11.1.2 使用sqflite进行增删改查234

11.1.3 数据库数据与UI界面的对接237

11.2 表单与数据持久化240

11.2.1 表单注册页240

11.2.2 持久化json数据和读取241

11.2.3 持久化XML数据和读取243

 

Day 12 插件及混合开发245

12.1Flutter和平台间的通信方式246

12.1.1Flutter/Dart端246

12.1.2Android/Kotlin端247

12.1.3 用toast连接两个世界248

12.1.4Flutter向平台传参250

12.1.5 插件的使用和上传253

12.2Flutter常见插件的使用255

12.2.1 路径插件和权限插件255

12.2.2 音频播放插件audioplayer257

12.2.3 视频播放插件video_player259

12.2.4 图片拾取器image_picker261

12.2.5 通过webview_flutter使用已有Web页面262

12.3Flutter的混合开发264

12.3.1Flutter和Android混合开发264

12.3.2Flutter和iOS混合开发269

12.3.3 让Android视图加入Flutter271

上下滑动查看

扫码购买

更多精彩回顾

书讯 |9月书讯(下)| 开学季,读新书

书讯 |9月书讯(上)| 开学季,读新书

上新 | 一本书带你吃透Nginx应用与运维
书单 | 开学季——计算机专业学生必读的10本畅销经典

干货 | 巨详细!使用OpenCV和OpenVINO轻松创建深度学习应用

收藏 | 开学季——想打好数学基础?这些经典教材你最需要!

视频 | 4min视频带你了解阿里B2B电商算法

赠书 |【第20期】实践深度学习?先接住这三板斧再说

点击阅读原文购买

相关文章:

  • 漫谈“数据仓库演进史”
  • “设计”拍了拍“产品、技术、运营、管理”:求你看看《用户体验要素》
  • TIOBE 9 月编程语言:C++ 突起、Java 流行度下降
  • 数字化转型新视角:从国家和行业角度看数字化转型
  • ​用户画像从0到100的构建思路
  • 更新!更薄!更精华:《JavaScript编程精解》来了
  • 吐血整理:盘点19种大数据处理的典型工具
  • 前端工程师不可不知的Nginx知识
  • 基于大数据的用户画像构建小百科全书
  • 要马儿跑,又要马儿不吃草?聊聊联邦学习与分布式机器学习
  • 太忙没空去看湖景?来看阿里云DLA如何快速构建数据湖
  • 【第21期】以实际项目作驱动,换种方式学Java
  • 确定了!图灵奖得主John Hennessy将来CNCC 2020做特邀报告!
  • Webpack优化——将你的构建效率提速翻倍
  • 用 Python 画哆啦 A 梦
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【React系列】如何构建React应用程序
  • Android交互
  • Django 博客开发教程 8 - 博客文章详情页
  • egg(89)--egg之redis的发布和订阅
  • Golang-长连接-状态推送
  • Java 多线程编程之:notify 和 wait 用法
  • Making An Indicator With Pure CSS
  • mysql_config not found
  • spring cloud gateway 源码解析(4)跨域问题处理
  • windows下如何用phpstorm同步测试服务器
  • 程序员最讨厌的9句话,你可有补充?
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 看域名解析域名安全对SEO的影响
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 前端存储 - localStorage
  • 延迟脚本的方式
  • 用element的upload组件实现多图片上传和压缩
  • 原生Ajax
  • 怎么把视频里的音乐提取出来
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • # Java NIO(一)FileChannel
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (WSI分类)WSI分类文献小综述 2024
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (分布式缓存)Redis哨兵
  • (附源码)ssm码农论坛 毕业设计 231126
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (转)平衡树
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .gitignore文件—git忽略文件
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET中GET与SET的用法
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @DependsOn:解析 Spring 中的依赖关系之艺术