Flutter开发APP应该如何起步呢？
哈楼，我是老刘 我的团队使用flutter已经4年了，有很多小伙伴都是0基础开始学习的 这里就总结一下学习的经验 其实学习Flutter和学习其它的编程技能是一样的，所以我们先来看看如何学习编程 在谈具体的Flutter知识之前，老刘觉得应该先来聊聊如何学习编程。 如何学习编程应该包含一系列的原则，而学习Flutter只是这些原则在特定平台的应用而已。 如何建立这些原则呢？我们需要先搞明白学习到底是在干什么？ 当我们在某一个领域学习、练习并实践了足够长的时间，就会把各种理论知识和实践的技能融合为一个有意义的整体，这就是心智模型。 举个例子，比如开车这个技能。你首先要去驾校学习理论知识，然后开始上路实践。 随着你的实践越来越多，相关的认知技能与运动技能就会变成一套与驾车相关的心智模型。 在碰到对应的场景时，这种模型会被自动调用出来，比如侧方位停车需要观察的特定位置、做哪些操作等等。 理解了什么是心智模型，也就能明白，其实学习就是建立某个领域的心智模型的过程。 以学习Flutter编程为例，就是建立一套Flutter开发各种场景下的心智模型。 比如如何编写一个展示商品条目的列表页，页面间需要通信时如何建立通信机制等等。 那么，我们是如何通过学习过程建立心智模型的呢？ 第一步：编码 假设你正在看一本Flutter编程书籍，书中的文字、图片是无法直接存储进大脑的。 大脑需要把这些外部信息转化成一种基于化学与生物电形式的心理表征，这才是大脑能够存储的数据格式。 这个过程我们称作编码，编码的结果则存储在工作记忆（短期记忆）中。 但是工作记忆只能存储3~7组数据，新的内容会把旧的数据冲掉。 所以我们还需要一个名为巩固的过程，把工作记忆中的内容转移到长期记忆中。 第二步：巩固 这个过程中，大脑会对新资料进行深层次处理。 大脑会重放或重新演练学到的东西，赋予其含义，填补空白，并把新知识和过去的经验联系起来，和已经存储在长期记忆中的其他知识关联起来。 这可能会需要数小时或更长的时间，而充足的睡眠对这个过程会有帮助。 这也就是为什么有时候我们睡一觉醒来，对昨天学到的算法有了更清晰的理解，昨天你只是知道要怎么实现，今天就可以把这背后数据是如何变化的过程画出来。 知识写入长期记忆是不是就完成了学习过程了？还没有，因为这时候写入长期记忆的信息存在两个问题： 第一个是新知识和历史知识的连接并不紧密也不充分。 老刘几年前读《非暴力沟通》这本书，读的时候挺认真，还记了思维导图笔记。 但是读完后就放那了，也没有有意识的应用书中的技巧。 过了两个月，有人问我这本书讲了什么，老刘发现已经回忆不起来太多东西了。 这就是因为知识刚写入长期记忆时，这种连接并不牢固，随着时间的推移，就会慢慢遗忘。 再举个例子，老刘刚学到幸存者偏差这个现象。觉得我理解的很明白了。 后来老刘看到一个报道说，研究表明经常吃辣的人可以降低消化道癌症风险，老刘看了觉得看起来调查了很多样本，应该很有道理。但是有人评论说这可能是幸存者偏差，消化道健康的人可能才会经常吃辣。 这时候老刘突然意识到，虽然我可能理解了什么是幸存者偏差，但是不代表碰到每个场景我的大脑都能想到幸存者偏差。 第二个是新知识模型本身还有很多缺陷，并不完善。 比如老刘上学的时候学平衡二叉树，上课的时候觉得自己完全学会了。 课后作业老师要求自己用C语言实现一遍，写代码的时候老刘就发现自己很多地方的理解似是而非，必须要翻开书查一查才能继续写下去。 那该如何解决这两个问题呢？这就用到了我们学习最重要的一个步骤：检索。 第三步：检索 检索就是大脑通过线索，从长期记忆中找到对应的知识或模型。 对学习来说最重要的，其实是检索带来的两个效果 老刘自己学习Flutter用了3周，精通还做不到，但是可以把项目中简单的页面替换成Flutter页面了。 后来老刘带着0基础团队学习Flutter，平均2周时间，团队成员就可以进行简单页面的开发。 为啥大家都比老刘快？ 因为很多坑不用再踩一遍。 这其实是学习任何领域编程的一条重要原则：向有经验的人学习，比闭门造车更有效率 老刘总结学习Flutter拢共分三步 语言是一切的基础，这个应该很正常 Dart语言其实非常简单，有Java、JS或者C++基础的，基本语法都问题不大 要注意的是Dart同时具有面向对象和函数式编程两种语言特性。 对函数式编程不熟悉的小伙伴需要稍微了解一下。 学习Dart的过程不要太过纠结细节 把最常用的20%的特性掌握，剩下的部分简单过一下，知道有这些功能存在即可。 在后续的开发练习中，用到相关特性可以回来再查。 老刘总结的《Flutter编程手册》中也汇总了Dart语言特性，方面需要的时候查找。 对Dart有了一些基本的了解后，既可以开始进入Flutter的学习了。 学习Flutter通常也是从Hello World开始 初学者到了这一步只要先照猫画虎，把程序搭起来，理解整个程序的入口在哪就可以了。 其实到这里我们已经有了一个可以运行的App，剩下的事情无非是在里面添加更多的页面和页面元素。 也就是扩展我们的Hello World程序 Flutter作为目前最流行的跨平台开发框架，提供了大量的用于绘制不同场景UI的控件。 我们扩展一个程序其实就是使用这些控件实现页面导航、在页面中添加各种各样的元素以及给用户展示动画等。 这一步的学习方式和学习Dart一样，先掌握最常用的那20%控件。 剩下的简单过一下，知道有这个功能。 在后续开发中具体用到这个功能时在回头来查就行。 也可以使用老刘总结的《Flutter开发手册》进行查找，已经覆盖了日常开发中90%的场景。 到这里，我们学习的第一阶段就完成了。 肯定有的小伙伴会觉得，这其中的第二步实在太简单了。 我们的学习过程其实是一个螺旋上升的过程。 接下来我们就可以根据最简单的hello world做一些深度的扩展。  Hello world从dart代码上看很简单。 但是让它运行起来，却包含了整个flutter的体系结构。 这其中以下几块，是老刘觉得开发大型flutter项目会用到的知识。 这个要特别强调一下混合开发。 因为我们实际工作中，大多数的项目都是在现有项目上的迭代。 用flutter重新开发一遍，从时间和稳定性上来说都很难接受。 而原生+flutter的混合开发模式，就是这种场景下最好的选择。 好了，聊了不少老刘的学习心得，总结起来学习Flutter和学习其它编程技术一样，遵循几个基本原则一定会有很好的效率和结果。 如果你对客户端程序员的发展或者Flutter开发感兴趣，都欢迎联系老刘，我们互相学习。