本文主要介绍Flutter 学习的建议

Flutter 学习的建议

对于前端 Flutter 的学习者,可以分享一下作者自己的学习经历吗?对于不同阶段的 Flutter 学习者可以分享一下自己的建议。

学习 Flutter 最重要的一点就是要理解:Flutter 里的 Widget 不是真正的控件

虽然在使用 Flutter 时我们写的界面代码基本都是 Widget ,但是 Widget 作为一个 immutable 对象,它不可能是真正工作的 UI 对象

在 Flutter 里真正的 View 级别对象是 ElementRenderObject, 其中 Element 的抽象对象就是 Flutter 里经常用到的 BuildContext

举一个我经常提到的例子:

如下代码所示,其中 testUseAll 这个 Text 在同一个页面下在三处地方被使用,并且代码可以正常运行渲染,如果是一个真正的 View ,是不能在一个页面下这样被多个地方加载使用的。

图片

所以 **Flutter 中 Widget 更多只是配置文件的地位:

用于描述界面的配置代码,所以描述文件很大程度上并不用担心嵌套带来的性能问题,我们也可以通过配置模版去优化代码的可维护性

所以对于学习 Flutter 我一直强调,比起去学习 Flutter 里上百个 Widget 的使用方式,更重要的是理解 Widget 背后的 ElementRenderObject 乃至 Layer 的工作原理,这样你才能系统地明白:

  • Flutter 如何通过 BoxConstraintsSize 布局?
  • Flutter 如何通过 SliverConstraintsSliverGeometry 完成列表的滑动和排版?
  • Element 在 Flutter 里的作用是什么?它是如何抽象为 context 并且连接 WidgetRenderObject
  • Flutter 里每个 Layer 是如何独立工作?每个 Route 又是如何在一个画板和 Canvas 维持自己的独立性?

只有搞清楚了这些问题,才可能对 Flutter 使用得心应手,能够在日常开发中“周旋”在 Flutter 的各种 UI 细节问题而不掉坑。

大前端学习建议

现在单点的技术在实际业务运用起来越来越没有优势,对于大前端的学习作者有什么建议吗?

首先不是说越来越没优势,而是对于庞大的开发者群里来说,深入底层的岗位和场景不多,前面也说过,如果没有对应的场景和平台,其实很难支持你在深入精通的路上发展。

举个例子:

你希望在音视频的路上有深入的发展,所以你开始学习 FFMpeg ,然后你学会了如何通过 FFMpeg 播放视频,转码编码,交叉编译等等…然后呢?

如果你需要继续精通下来,就需要开始了解视频的封装协议、视频编码格式,音频编码格式、网络协议类似,然后需要去实践:

  • 如何针对不同格式的编码进行优化;
  • 不同协议如何优化和减少冗余;
  • 针对关键帧和帧序列如何优化;
  • 不同网络条件下对码率进行优化播放;
  • 直播如何追帧降低延迟;
  • 如何尽可能不失帧地压缩和传输视频;

以上对应这些内容,如果你没有真实的场景和用户数据,很难支撑你在这条路持续精通深造,当然我不是劝你放弃,如果有能力和条件,肯定还是在某项技术能持续精通才是王道

而什么是大前端?那就是知识的广度!这里的广度不是指你要懂很多技术,而是你要会技术的抽象与通用能力的拓展

大前端能力需要的是你能够在某个平台达到 75 分的能力,并且将这个分数在很短的时间内应用到其他平台,就像前面说的:

  • Android 上关于 Canvas 的技能就利用到 FlutterWeb 上;
  • 响应式开发和状态管理的理解在 RNFlutter 也能很好地利用,甚至在 Jetpack Compose 也可以快速的上手;

技术的抽象能力让你的技术可以迁移适配,只需要短时间的文档和适应,就可以完成平台的工作,在我看来**大前端的未来 “不是我会什么所以做什么,而需要什么我就能做什么。”

关于持续写作

我们也看到作者是掘金高等级作者里面更文频率非常高的作者,且内容质量都很好,写作带给你最大的影响是什么?有什么写作心得跟建议吗?

写作给我最大的影响有三个方面:**学习、记忆和激励。

学习

首先持续写作的基础是学习,事实上很多时候学习国外的文章和文档我是没有耐心的,而当选择把它翻译成中文输出时,这时候反而会耐下性子把对应的内容看完,因为不看完内容就没办法很好的翻译出效果。

另外就是,当我在写文章时经常会写到某个点时,突然会停下来思考“为什么”?因为很多时候“知道一个东西”和“理解一个东西”是两个不同的概念

而当我写文章时,我就需要把”我知道”的变成“我理解”的状态,把零散的知识变成能够串通的体系,只有我真的理解了这个知识点“是什么”的时候,才能够把它转化为通熟易懂的文字,这其实就是我学习的一个过程。

记忆

首先持续写作的第二个目的就是记忆。

在掘金上可以看到我写过很多类型的文章, 从 AndroidReact NativeWeexFlutter,有介绍框架的,也有深入底层和问题集锦等,但是事实上很多内容写过一段时候后我可能就会忘了

所以当我选择把自己想要的内容转化为文章后,在需要时,我就可以通过这些文章找回对应的记忆,这也是我产出的目的之一

激励

最后就是激励,写作对我来说是一个很好的正向激励,因为我写的东西有人看,并且有人喜欢,这就会给我持续产出的动力

我相信很多程序员都尝试过去做开源和写作,因为这其实本身就是很好的自我包装,但是这里面有个误区:那就是可能大家以为只要开源一个项目就能一夜爆火,只要写一篇好文就能一夜10W+,这其实很难,抱着这样的心态往往很容易就带来消沉

就我的写作经历而言,一篇文章一开始最多能有几百阅读就挺好的了,然后靠的就是时间和推广。

“酒香也怕巷子深”,所以写作也需要通推广,比如:

  • 通过配套项目去介绍你的文章;
  • 去各大平台投稿;
  • 去解答别人的问题,然后建立自己的社群;

这是一个漫长的过程,但我一直比较喜欢一句话:“人们往往高估了短期的收益,低估了长期的回报”,持续分享和推广是一件很重要的因素。

另外写作选题时可能会发现:“哦,原来网上已经有人写过了” , 之后就放弃题材不写了,这是很正常的心态,但是这样的放弃就会让你越来越难产出内容,因为你不能保证你一定快过别人

其实当你有需要写内容时,发现别人已经产出过相应的内容后,那你可以参考下别人的内容是否和你的想法有什么不同,然后有什么遗漏或者可以升华的地方,甚至是你可以从另外的角度或者更系统的方式去描述你的观点

站在别人的肩膀上可以看得更远,当然不是让你 cv 抄袭,因为抄袭的意义不大,又不是小学生罚默写。

最后,写作提供的服务是内容,期望得到的是关注和交流,所以要比较自己陷入不必要的情绪陷阱

“不要成为别人情绪的垃圾桶,那就在开始时把盖子盖上或者远离”,面对不善意的评论或者无效的交流,我会选择屏蔽或者远离,这样可能帮我节省出更多的时间来做有用的事情。