给 2020 一份答卷 | 掘金年度征文

4,822 阅读18分钟

2020 年就这样过去了,但也该过去看了,这一年经历的、见识的、探索的、收获的已经很多。整年基本上都在围绕着一个主题 Flutter,本文将从 FlutterUnit 项目、今年的著作、我的Flutter 群、今年的成长、情感几个方面总结一下今年的历程,并展简单望一下 2021年 。


一、倾心打造 FlutterUnit

今年占据我业余时间的霸主当属 FlutterUnit 这个开源项目了。从 2020年04月15日 开始开源,如今 142 次提交,记录了我这八个月的点点滴滴。在不断的更新中,FlutterUnit 也在逐渐强大。增加了全应用的悬浮按钮方便操作,底栏增加到四键,增加 绘制集录个人页面

image-20201221084259618

悬浮按钮第三页第四页
2711608517976_.pic2691608517974_.pic2701608517975_.pic

1. FlutterUnit 组件收录的幕后

收录的组件数量从最初的 213 个 到现在的 306 个,可以说现在 FlutterUnit 已经是名副其实的Widget 字典了。而其中的每一个解释、每一个介绍、每一个代码,都是我一字字敲出来的。比起技术而言,我更佩服自己的耐力

DragTargetGridTileFlex
2601608512131_.pic2611608512132_.pic2621608512133_.pic

其实最重要的不是生孩子,而是养孩子。开源项目也是一样,只有能够维护,它才可以不断成长。在FlutterUnit 中,对组件信息的维护显得尤为重要。比如,有错字或信息需要修正、需要新加组件、对某个组件添加一个介绍节点。如果靠肉眼+手动操作,会非常麻烦,导致维护的时间成本提高。FlutterUnit 能够维护起来的保障是我为其定制的一个解析工具。俗话说:只有用魔法才能打败魔法。

image-20201221091021530

在项目中的 widgets 包中,是所有被收录的组件。拿 ListWheelViewport 来说,它里面有四个文件,就说明在组件详情中有四个介绍节点。每个节点中都会有一段红框中的文字用于介绍节点信息。然后遍历所有 widgets 包中文件,通过一个 NodeParser 的解析器来解析红框中的内容,将这些信息同步到数据库中。这样想要修改信息,修改红框中的内容即可,想要添加节点,再写一个 node_xxx 的文件即可,想要添加一个组件,只要在 widgets 包中添加即可,这就是 FlutterUnit 能够维护更新的保障。

image-20201221091357740

虽然文案、组件代码必须要自己写,但这衍生出一个好处,那就是可征集。这应该算是对 面向接口 的实际应用吧。你并不需要了解 FlutterUnit 的内部运行机制,只需要给出一个示例 demo,按照红框中的接口格式,那么你写的演示组件就可以收录到 FlutterUnit 中。 这样就可以增强 FlutterUnit 的可拓展性,任何人都可以简单地加入 FlutterUnit 的集录之中,共同维护, 这也是 FlutterUnit 的初衷。
不过目前为止,都是我一人在弄,现在整个组件体系基本完善,大家也可以为已收录的组件,贡献介绍节点,让 FlutterUnit 更加丰富。你可以pr 或开 issue 提供组件演示代码FlutterUnit 的目标是 星辰大海,千万人也好,我一人也罢,都会一直将它推进的。


2. FlutterUnit 绘制集录的推进

如果关注 FlutterUnit 发展的朋友会发现,底部导航栏由两键升级到四键,其中第二键是 Flutter 绘制集录 页,五个绘制的分类,收录相关的绘制作品。可以说该集录的推进,催化了 《Flutter 绘制指南 - 妙笔生花》这本小册的诞生的进度,关于小册之后再说。

画廊分类点击进入切换画作
2020年12月21日09-38-512020年12月21日09-40-512020年12月21日09-41-44

这些画作的主要目的在于:为一些喜欢绘制,或打算学习绘制的人有练习的素材样例。也可以让大家看到 Flutter 在绘制方面并不输于其他平台或框架,你曾经的绘制技能依然会有价值

123
2641608516337_.pic2671608516340_.pic2631608516336_.pic

另外会收录一些堪称 艺术 的作品,使用 Flutter 的绘制进行呈现。看到 Flutter 绘制的无限可能

123
2681608516341_.pic2661608516339_.pic2651608516338_.pic

目前 绘制集录 仍在测试阶段,收录的作品较少,后面会逐步完善。如果你要好的绘制作品,也可以通过 pr 或 issue 将代码给我,如果我觉得有还不错的话,你的大名将会与作品 共同展示在 FlutterUnit绘制集录 的页面之中。


3. FlutterUnit 桌面端的推进

由于 sqflite 已经支持 windows,所以 flutter_unit_windows 就没有存在的必要了,桌面端进行统一,分支更名为 flutter_unit_desk

image-20201221130847051

目前 WindowsMaocOS 使用同一套代码实现,以后维护就方便很多。目前桌面端收录组件已经同步到 306 个。大家在FlutterUnit 的 GitHub 主页根据相关链接下载体验。目前 FlutterUnit 的重心仍在 移动端,所以桌面端更新的频率不会太高,但当做词典还是绰绰有余的。

image-20201221140742799

image-20201221140914336

可能很多人会疑惑,为什么我会这么执着于 FlutterUnit 开源项目呢,睡觉它不香吗?从维护一个开源项目中可以获得很多成长,也可以为自己圈出一席之地,其实总的看来我并没有什么太能拿得出手的东西。我一直把FlutterUnit 作为我的第一张名片,可谓荣辱与共。其次,作为一个完美主义者,没有全图鉴是一件让人纠结的事。所以 Widget 对我而言就要一张张待收集的功能各异的 卡片。也许这对于很多人而言并不重要,只要了解常用的 Widget 就行了。确实是这样,就像你没有必要背下整个字典,但有字典在那里,你就会很安心。还有一个目的:为 Flutter 的传播做出力所能及的事

2761608547398_.pic


二、2020 年的两部心血之作

1. 《Flutter 之旅》

这本书可以说写得非常艰辛,在写这本书的过程中,让我对 Flutter 有了一个全面的认知。那是 2019 年的 6月份,机械工业出版社 的一个编辑联系我有没有兴趣写一本 Flutter 相关的书籍。这对于我来说是一个莫大的机遇。当时市面上关于 Flutter 书也就只有一本,而且是介绍地非常浅显的那种。当时很多人对 Flutter 的认知是非常片面的,我想我可以将 Flutter 讲解得更深一些,更全面一些,另外我喜欢看源码,可以用一章来讲述一下 Flutter 框架的渲染机制。所以我没有犹豫,直接答应了。

2741608535152_.pic

由于 Flutter 是一个 UI 框架,所以一开始就决定是彩板了。不过一开始打算写的是一个 主角在 Flutter 世界冒险的故事,有一定的人物、剧情、对话、场景。主要是设定了一个世界,主角 捷特 到新发现的 Flutter 洞穴 探险的故事,主角运用自己曾经的知识,从未知逐步认识Flutter 世界 。在这里组件都被拟人化,每个组件都是一个人物,触发剧情,顺别讲解知识。大概写了半年,400 多页。但是

img

这个方案没有被通过,其一:风格太过活跃,掺杂着很多情节对话,背景介绍,而导致知识要点不明,对出版物而言并不适合。其二:无关要素过多,导致页码过多,彩板印刷成本问题。
后面我自己看,也感觉花里胡哨的 ,也许有人会喜欢这样,但更可能会反感,知识没介绍好,剧情也不咋地。再加上半年间对 Flutter 有了更深的认识,对前面写的有些不太满意。在某个中午,当机立断,改!

2731608535151_.pic

就在那天,我慷慨激昂地重写前言时,我的 Mac 本硬盘坏了。然后在从写的那份慷慨激昂就完全消失在这个世界上了。不过好在我的备份意识良好,重要的东西都备份在云上。当时的感觉就是 : 这暗示着一个新的开始,这本书也将迎来它新的生命。于是花了半个月,取其精华,去其糟粕。将这门书从拙劣的顽石中解放出来。这本书最后被砍到 274页,我也是舍弃了一些不太重要的内容。对应 安装软件、环境介绍Flutter 的网文 我不愿在书里写,很浪费空间。本书只在意 Flutter 本身的用法和内容,次相关的东西由 FlutterUnit 承担。


2. 《Flutter 之旅》与 FlutterUnit 的关系

FlutterUnit 是在《Flutter 之旅》之前进行的,但进展非常缓慢,当时只是想要 用魔法打败魔法,用Flutter 演示 Flutter。但当时对 Flutter 的认识并那么不深刻,FlutterUnit 也是自己的一个 demo,没有开源。但经过 《Flutter 之旅》的创作历程,让我对 Flutter 有了更全面的认识,这也在很大程度上催化了 FlutterUnit 开源的进程。由于我要写书,所以我必须对 Flutter 认识更为深刻。就是这种思想,让我对 Flutter 的各个Widget 进行测试,这也是 FlutterUnit 最原始的一批素材。

2751608540453_.pic_hd

由于书的内容有限,不可能将所有的 Widget 一一介绍,所以在书中只能介绍一些常用 Widget,并将认识 Widget 的方法告诉读者。这点一直是我的心结,然后通过 FlutterUnit 来弥补这一缺憾。但就 FlutterUnit 而言,它是我的个人开源行为,是对任何人开放的,只是顺便作为 《Flutter 之旅》 的补充。FlutterUnit 的目标是星辰大海,它终将成为一个完整而成熟的软件,为 Flutter 爱好者而服务。


3. 写《Flutter 之旅》的困难和收获

《Flutter 之旅》 一开始基于 v1.7.8 写的,随着写的过程 Flutter SDK 逐渐更新 v1.9.1,最终写完时是 v1.9.1+hotfix.6,在校对过程中 v1.12.13 版发布,这次个版本的改动比较大,源码也有一定的变化,Android 端的插件代码实现变了很多。由于书中章节涉及了 Flutter源码的分析Flutter 平台插件实现 的内容。所以我想要更新到 v1.12.13,这样就会比较麻烦编辑人员,但最终还是改了,最终出版是基于的版本是 v1.12.13+hotfix.8 ,我将书中所有的源码在 1.12.13版本中跑了一边。出版前几周 1.17 发布,对于路由栈返回时取消了 State#build 方法回调。这时书也就基本定型了,编辑的意思是:没有什么是完美无缺的,追求完美是无止境的,一年后你再看,仍会发现有很多不足。只要自己觉得对得起现在就行了。就这样版本保留在 v1.12.13+hotfix.8 ,并在相关处加了一句解释注释。

为了写这本书,我调试了 n 次 Flutter 框架层的逻辑,带着各种各样的问题去探索 Flutter 的渲染机制。Flutter 中有哪些树,成树的逻辑是怎样的,各种树的根节点是什么,什么时候初始化的,它们之间存在什么关系,State 是什么,它到底是干嘛的。于是 Widget、Element、RenderObject 层层的面纱就被逐渐解开,我眼中的 Flutter 又是另一个不同的世界了。通过写这本书,我完成了对 Flutter 认知的升华,也为之后的事打下了坚实的基础。 这时我才敢说: Flutter ,我入门了
书出版至今快半年了,由于彩板价格比较贵,感觉出版社也没什么宣传,销量确实很差。其实销量什么的我并不是很在意,写这本书的过程中已经成就了我。如今我对 Flutter 的认知已经更进一步了,由于当时认知的局限,书中有个别地方处理地并不太好,这也是纸质书非常大的局限 无法及时更新。即使如此,本书对于入门的新手而言也足够精彩,也足够认识到一个全面的 Flutter 世界。


4.《Flutter 绘制指南 - 妙笔生花》

这是我的第一本掘金小册,一共 20 节,全面介绍了 Flutter 绘制的知识。现在已经有 1600 人已购,对我来说已经非常满意了,因为这是 Flutter,而且是关于绘制的内容。这里就不絮叨这本小册的内容了,介绍文可见《【 Flutter 绘制指南 】那个男人带着小册来了》。这里来说说幕后和花絮。

image-20201221175731215

其实本来是打算在专栏里写一个免费的绘制系列的。但是发现 V5 就可以自己创建小册了,绘制的体系也刚好放在一个小册里,这样就不必在每篇文章开始加一批的链接,成册起来也比较完整和系统。而且写一本小册也算是我在掘金的夙愿吧。那时应该是2、3月份,比较看得起自己吧,打算在 3 月 28 号 写完,以 3.28 的价格发布,总结出我最擅长的领域,作为我的生日礼物,堪称完美。没想到写了几篇之后就打脸了,感觉自己对 Flutter 绘制的认知还是存在局限性,有个瓶颈困扰我很久。再加上那段时间工作比较忙,自然以工作为重,这个小册就搁浅了,知道后来很长一段时间,我忘记了这本小册的存在...

123
2791608548036_.pic2781608548035_.pic2771608548034_.pic

然后业余时间 基本上是改《Flutter 之旅》的错误和维护 FlutterUnit 项目所占用,工作是双休,所以有很多时间来研究些东西,期间经历一段情感的波折和堕落期,最后再说。然后工作上刚好有个需要绘制的需求, 这便是如鱼得水,东风来之,继续写小册的时间不到半个月。本来打算慢慢写的,预计两个月之内完成,但是感觉来了,就刹不住了。通过阅读 Flutter 源码中绘制的代码,解决了我曾经很多的疑惑,也让我发现曾经的画法是有问题的,突破瓶颈后,更坚定我写这本小册的信心。这本小册也是对我自己的一个交代吧,我进入掘金因 Android 的绘制 而开始,这是给自己的一个满意的答卷。小册最方便的地方在于它修改起来很方便,错误可以被及时更正,有补充内容可以随时添加,而且可以放 gif,比实体书灵活很多。


三、编程技术交流圣地[-Flutter群-]

首先,感谢群里的伙伴对我 任性 的容忍。周三英文日的群规,已经从五月份维持到了现在,我觉得挺不容易的。我在群里给人的感觉就是严厉,我创建这个群的目的在于分享和探讨 Flutter 相关知识,而非答疑群。经过一年的观察,很多人还是一有问题就问怎么办,救救孩子吧,有的很浅显的问题,搜一搜完全就能解决,然后就会被我怼。我也知道这对一些刚接触的人不是很友好,但是群必须有群规,不然什么都拿来问,群就失去了意义。

周三图文直播被压迫人们的反抗
2811608551016_.pic_hd2801608551014_.pic_hd2821608551017_.pic_hd

我比较认可的是在问问题前,提问的人能够很好地将自己的问题表述完整。并附加自己对问题的见解和为解决这个问题作出了哪些尝试,提供一个可运行的 main.dart 文件给出代码。这才算讨论和交流,这样的提问才有价值,而非只是你问,让我答。这样除了让我变得更强(暗指秃头)之外,对你没有什么成长。除了个别几个铁粉偶尔分享简介外,大家一直无视我的苦心。点名感谢 Alex 本群唯一认证喷子 对群中答疑做出的贡献。另外,偶尔也会在群里做一些源码解读的 图文直播,感觉纯属自嗨,群成员参与度极低,不过也算群的特色之一吧,发现什么小要点,我也会在群里分享一下。

image-20201221200751587

另外,在哔哩哔哩我有直播间,名字叫 源码之间。不过就播过三次,主要就是带群友看看组件的源码。不过写文章我很在行,但是说起话来,实在不行,即使只是声音,也感觉很害羞,没有即兴表演的天赋。后面有时间,我还是也会开些直播锻炼一下我的嘴。你也可以在 哔哩哔哩 听一下我的朗诵,说是想要留下最美年华时的声音,但是事情一多,次要的事情就会被搁浅,哎~


四、我的成长

1. 工作中的成长

写书也好,写文章也好,通读 Flutter 框架也罢,这些都是理论上的成长,虽然这些也非常重要。但是工作中的成长对我来说是最宝贵的也是最亟需的。2019 年末,我开始负责一个 Flutter 桌面项目的开发,可以说我是比较早的接触 Flutter 桌面的一批了。一年的时间,见证了 Flutter 桌面的一步步发展,项目也逐渐地完善,不过离完成还有一定的差距,但绝对已经超出你们如今对 Flutter 桌面支持的认知。由于工作的实际经验加上写作的理论经验,让我对 Flutter 有了更深的认识,这些经验对我来说是及其宝贵的。在后面我将继续探索 Flutter 的使用,会更加注重性能方面,也会持续输出一下干货的文章。


2.我的生活

我也并非每时每刻都在写代码,我也会玩游戏,追动漫,看电影。我只喜欢玩卡牌类的策略游戏,对王者荣耀、吃鸡、电脑上的大型游戏毫无兴趣。喜欢玩炉石传说,手游现在只是玩玩阴阳师了。堕落的时候一天看三部电影或一天一部十几集的动漫都是有的,但我有一边看剧一边敲代码的能力。还有阳光明媚的时候,喜欢看看书,画画画什么的,毕竟我还有一个需要表达出的世界,而我现在还没有足够的能力描述它。疫情严重的那段时间,让本来就比较宅的我变得更宅了,我本以为我是怎么吃都不会胖的那种人,但事实证明我不是,于是锻炼一词进入了我的生活。最令我欣慰的是我的头发依然健康,没有疯狂掉发的迹象。


3. 为一段感情画上句号

如果说 2020 有什么遗憾的话,也就是儿女情长的事情吧,最后还是无法挽留她。书出版后,出版社给了我6本 赠阅尊享 的样书。我以送书的名义见了她最后一面,她也答应了。一年半未见,那天的约见还是一如常往,我俩仿佛还是两年前的我们,没有丝毫的陌生和违和。吃饭、逛街、散步、聊天、走遍曾经我们走过的几个公园。在回去的公交上,她躺在我的肩上闭着眼,让我报数字给她心算。这个女孩已经订婚,这时爱与不爱都已经不那么重要,我只知道我和她的时间已经进入了倒计时,这是我们最后的时刻。在最后一个拥抱后,我拿了她的头上的蝴蝶结,就这样我们永远地分开了。现在她已为人妻,我也已看破红尘。在此之后,我开始静下心来,打算继续写 《Flutter 绘制指南 - 妙笔生花》,不出意外地很快就完成了。也许,女人只会影响我敲代码的速度...


四、2021 年展望

  • 好好工作,继续积累经验,完成分内之事。
  • 维护 FlutterUnit 开源项目,丰富内容。对桌面端的 UI 展现进行优化,现在的界面还是有点丑。
  • 继续对 Flutter 的深入研究,着重应能方面,优化目前开发的项目及 FlutterUnit
  • 保持掘金专栏文章的输出,提供高质量的文章。可能还会写一本小册。
  • 多读些源码,练练英语,对思想层面的东西多加总结。
  • 音视频方面,有时间可以捡起来,也许会有用。
  • 定些周末在 B 站开开直播,看看源码。多诵读一些诗文,留下声音。

@张风捷特烈 2020.12.21
我的公众号:编程之王
联系我--邮箱:1981462002@qq.com -- 微信:zdl1994328
~ END ~