大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
近期有不少网友加我微信(微信号:island-coder)咨询 Flutter 学习相关的问题,Flutter 作为一门新的技术,确实相关的资料书籍不太多。但就 Flutter 生态的影响力而言,已经是越来越强了。譬如,在 StackOverflow 网站上2021年度最受欢迎的技术中,Dart 语言排在了第7位。随着谷歌对 Flutter 跨平台解决方案的推进,估计会有越来越多的开发者使用 Flutter 构建他们的应用。
本篇,就学习 Flutter 来一次完整的梳理,也欢迎大家在评论区进行补充和交流。
先上一份思维导图,让大家有个整体认识。
在学习 Dart 语言前,若没有任何编程基础,建议先了解一下计算机基础知识。Dart 作为一门现代化的面向对象编程语言,具备了市面上大多数编程语言的特点,具体来说会分为下面这些内容:
作为一个合格的App 开发,能够将一个UI 界面还原出来是基本的要求。建议一开始需要熟悉Flutter框架提供的自带组件,然后可以通过自带的组件组合成为自己的自定义组件。这部分内容包括:
Container
,SizedBox
,Padding
,Stack
,ListView
,GridView
等组件。TextField
,按钮,文本,图片,图标等组件。应用中,表单在界面中出现的频率很高。如何处理表单对开发效率的影响很大。建议可以一开始从简单的表单页面开始,例如登录页、注册页。然后再做一些复杂的表单页面,具体如下:
状态管理是 Flutter 的核心,如何处理数据实体、业务逻辑、界面之间的关系对代码的可维护性十分关键,而这都依赖于状态管理的实现。对于状态管理,建议按如下方式学习:
StatefulWidget
和 StatelessWidget
的源码,会有更深刻的理解。setState
这种简单粗暴的全局更新,状态管理插件的一大优势就是可以实现局部刷新。通过按需刷新可以极大地提高页面的流畅度。关于状态管理的内容,可以通过阅读下面两篇文章来进行了解:
App 的业务功能开发,相当一部分工作是在与和后端对接口、联调接口。了解与后端的数据交互,封装好网络请求库非常重要。这里建议按如下的方式进行学习:
Headers
和 Cookie
:App 和浏览器不同,浏览器会自己管理 Cookie
。而 App 需要自己管理 Cookie
。因此有必要了解如何设置请求头 Headers
,以及如何获取后端的 Cookie
并回写到 Headers
里面。当你对界面、状态管理、网络请求都掌握差不多到时候,使用 Flutter 开发基本的 App 就基本没问题了。这个时候需要考虑应用结构如何优化。对于 Dart 而言,提供了 Stream 和 StreamListener 这样的工具来通过流的方式驱动关联业务或界面更新,实现响应式编程。这里面典型的是 BLoC 模式 (BLoC 也可以用于状态管理)。了解一下 BLoC 的理念对设计整个应用程序框架十分有帮助。
当你掌握上述的基本技能后,你看到别人 App 的酷炫动效时肯定心痒痒,想自己偶尔也能玩一下这类高大上的东西。这个时候就需要了解动画的实现了,Flutter 提供了很多动画构建方式,比如:
AnimatedContainer
,AnimatedOpacity
等等,通过这些组件可以实现简单但有趣的动画。AnimatedBuilder
可以构建可复用的动效。Lottie
就可以将 AE 的动画转换为 Flutter 动画。如何查找动画插件,这需要懂得搜索,比如搜索关键字 Animation
,或者经常逛一些技术社区,会让你的视野开拓很多,也许,不经意间就能发现一个酷炫的插件。当你的动画都能搞定的时候,你会发现产品和设计可能已经对你刮目想看了,这个时候他们提出的交互或者界面效果会提高(千万别觉得升级自己的技能是在给自己挖坑)。比如,可能会出一个奇怪的外形,然后需要你实现,这个时候就需要用到绘图了。绘图其实需要挺高的数学知识辅助的,你可能需要提前复习一下高等数学、线性代数知识😜😜😜 —— 所以大厂筛选学校和学历其实也有一定的道理的,这些筛选出来的人的基础知识一般都不会差。
ClipPath
:自定义裁剪路径对于绘制有规律的形状来说可以轻松搞定,当然有些复杂的可能需要一些贝塞尔曲线知识。CustomPaint
和 Canvas
:使用 CustomPaint
和 Canvas
可以随心所欲地绘图,包括你想搞个小游戏也行。但是,这个也是很烧脑的一环,说到底,数学真的很重要!随着网络的升级,本地数据存储可能不像之前那么重要。但是,不论是对用户体验还是减轻后端压力都是必不可少的。譬如,微信就把整个个人的聊天记录存储在了本地 —— 既节省了服务器的存储空间和加载请求量,还能够对外宣称是“保护个人隐私”。本地存储主要有三个方面:
SharedPreferences
实现。path_provider
插件实现。实际上页面导航在一开始就会用到,大部分情况下,自带的导航和路由管理都能够满足需求。对于路由可以按如下方式进阶:
如果你的公司业务条线比较多,也许此时已经成为公司大神的你会被邀请做基础设施建设,或者是你自己想为开源社区做做贡献,这个时候就需要构建自有插件或开源插件了。Flutter 提供了插件构建模板工程,你可以按步骤构建自有插件,然后供整个公司的各个业务条线使用,提高各个业务条线的生产力。
原生交互分为三个部分:
这块对于混编的应用来说是必不可少的,此时你的知识体系需要升级了,你需要学习安卓的 kotlin 开发,iOS 的 Swift 开发(呃,本来想一站式搞定,结果又绕回来了)。当然,到这个阶段,相信这些已经难不倒你了!
恭喜你!你的应用可以在各大应用市场上架了!记得我的第一个应用在 AppStore过审的时候别提多兴奋了(之前被拒了好几次😂😂😂)!如何进行应用打包这个搜索一下就能搞定了,但是如何应对AppStore 每年都变的审查规则也是一场斗智斗勇的过程。 而安卓,如果搞定碎片化的操作系统分布也是头疼的一件事情。建议提前在应用内做应用统计,以及异常上报,避免发布后在用户机器上出现奇怪的问题。
技术永无止境,再往后,你可能会深入去做性能优化、应用架构设计。这些方面很大程度靠个人平时的积累,多输入新的知识,同时了解其他的应用框架和特性(不限于 Dart,比如 Java 的 Spring 框架,Web 端的 React、Vue)都会让你对当前的应用架构设计有新的认识。扩充视野和技术深度,也许你就是下一个 CTO 的人选💪🏻💪🏻💪🏻!!!
【掘金官方评论抽奖】各位 Flutter 开发同学,你们是因为什么选择了 Flutter?欢迎评论区交流哦!
我是岛上码农,微信公众号同名,这是Flutter 入门与实战的专栏文章,提供体系化的 Flutter 学习文章。对应源码请看这里:Flutter 入门与实战专栏源码。如有问题可以加本人微信交流,微信号:
island-coder
。👍🏻:觉得有收获请点个赞鼓励一下!
🌟:收藏文章,方便回看哦!
💬:评论交流,互相进步!