接触 Flutter 三个月,现在写了两个小程序,一个是工作上原本就有在用易语言做小程序,用 Flutter 重新实现,第二个小程序时模仿开源项目的一款简易的 RSS 阅读器。
Flutter 前端框架#
Flutter 只要一套代码库,即可构建、测试和发布适用于移动、Web、桌面和嵌入式平台的精美应用。
遇见 Flutter 是一个很偶然的机会,在手机版谷歌浏览器上看过一眼,被它的跨平台的特性所吸引,现在市面市面上大多前端框架要么只能写 App 要么只能写 Web,而且需要学习不同的编程语言,单学任何一个难度都不小。
刚开始在网上找到很多信息,显示 flutter 发展一直在攀升,和其它成熟的框架相比还是有距离但是跨平台的特性,对于写跨平台小软件是一个很好的选择,加上 Dart 语言也是相对简单,最后我选择了 Flutter。
第一个小程序#
第一个用 Flutter 写的小程序是一个计算工具,主要是给现在在职的销售用的。在工作中就有在用易语言写的小程序,但是只能在电脑端使用,对于销售来说在手机上用相对更加方便,这个做出来大概率是可被销售们使用起来的,是有实际需求的,用这个来试水再考虑后面是否要深入。
最终整个程序复刻的时间跨度大概花了 2 个月,白天上班基本上都是晚上弄,第一个页面出来用了 6 个星期主要是要一边学一边做,同时做了一些常用组件标准化以及屏幕适配,第二个页面在组件布局上花的时间不多,主要是在数据处理上花了我三个晚上,用一个星期完成。
第二个小程序#
一款简易 RSS 阅读器。
这是我找的一个开源项目,用来模仿和学习被认识怎么写程序的,特别是在文件框架和代码格式上。所以我看掉了所有可以没有的功能。这个主要是在 Feed 的解析上花了比较多的时间,这是这个项目最核心的功能,否则就没有后面什么事情了。分析源码是怎么实现的用了 1 个星期,然后自己边验证边学习这些代码用了 1 个星期,只做最核心的几个功能,一个 Feed 源的解析和添加,以及标题的浏览,以及全文阅读的页面,虽然看起来就是几个小功能,但是也是前后用了我一个月,具体写只是花了两个星期包括中间学习了 Isar 数据库和 Riverpod 状态管理,获取的 Feed 的数据需要有一个数据库存放可以用来快速查询这是之前没有涉及,写第一个小程序的时用的是 Provider 来做状态管理,会有一个很大的限制就是在跨 Widget 树时实现状态管理就比较麻烦,容易发生冲突,而 Riverpod 状态管理是对 Provider 的再次包装,用起来相当于全局变量,不受 Widget 树的限制。
最后做出来一个很简易的小程序,最大收获就是在阅读项目源码也让我对文件框架的设置上比以前清楚多了,以及接触到超级好用的 Isar 数据库。
我的编程经历#
在此之前,只是作为业余喜好学过 Python、C 语言、微信小程序,都是一些基础的语法和基本的使用。
大学做毕业需要用单片机,而单片机用 C 语言,接着是小程序也是在大学做毕业设计时学的,当时毕业设计在做一个基于物联网的力量训练计数器,当时需要小程序将设备上记录的数据显示在微信小程序上,当时做毕业设计只给了一个月时间,那段时间算是每天从早上起来一直弄到晚上睡觉,小程序的学习相关功能需要的代码语法的学习也就用了 1 个星期不到,单片机用 ESP8266 用 Arduino 来编写也是边学边做用了不到两个星期验证了模块所需的代码,然后组合在一起。另外花了 1 个星期时间设计了个外壳加制作和组装,再到实际的使用和修改。
还有就是学过 Python 基础语法自己能写一些办公自动化的脚本程序。
Flutter 用的是全新的 Dart 语言,我没有去学 Dart 语法,基于以前自学其它编程语言的基础过程让我知道对于新手而言完全没必要,有点编程基础的就能直接动手写 FLutter 程序,写程序能够最快带来反馈。
借着前面的一些杂七杂八的基础下不需要学习 Dart 语法我就可以看懂一些代码,基本就是看官方的教程和文档,看不懂再去谷歌搜索,整体上虽然还有很多理解的不是很透彻但是基本能够写出一个程序。
新手开发第一关:开发环境配置#
Flutter 是我第一个配置的前端框架开发环境,但是 Flutter 的环境配置的过程会有很多各种你意想不到的问题,就光 flutter 环境配置就花了我 4 个晚上 (电脑用的 Windows)。
在这配置过程中会遇到各种问题,网上大多数安装教程里都是没有提到过。光安装配置遇到的问题至少 8 个,还有一些小的问题没有记录,不过好在都解决了,有些问题找了很久才找到解决方案。
第一次装的时候每次遇到一个问题就能卡我至少 1 个小时,就怕连环境配置的这个环节都过不去,中间有时候找不到解决方法都想要放弃这个东西,但目前就 Flutter 可以全平台一套代码解决的框架,硬着头皮去弄,好在后半段顺畅起来,不然真的就放弃了。
最后想说Flutter 开发环境对小白一点都不友好。
新手开发第二关:组件的使用#
过了开发环境配置这一关,在 Flutter 的代码上写出一个简单小程序基本没什么问题,Flutter 是用 Widget 小部件的方式来构建所有 UI 组件,组件样式直接就在小部件中构建,交互逻辑、业务逻辑也是写在小部件中,在 Flutter 中 Widget 贯穿所有页面和组件,在 Flutter 中每个组件、页面都是可以看作小部件,可以互相嵌套,最终会形成一个 Widget 树,编写代码的时候不存分层。展开讲就需要涉及 flutter 底层的原理,这一块只做了简单了解,就目前我的使用深度来说还涉及不到,就没有过多深入。
对于组件的使用主要还是看官方文档,官方文档也是比较详细,再配合网上有很多教程,基本就能学会用。
新手开发第三关:状态管理#
组件有交互,就会有不同的状态,如何在发生交互时实时改变状态在 Flutter 中就会显得八仙过海各显神通,社区目前有很多的状态解决方案,各有利弊。刚开始不太了解,就选择了官方第三方包 Provider 来做状态管理,Provider 包装了一个能够监听 widget 变化的类的使用,比起自己构建相对方便一点,在做一些简单的状态管理是没有问题的,但是一旦涉及跨 Widget 树 (或者说跨页面) 的状态管理就不好用了,这是一个很大的限制。
后面去学习了 Riverpod 才知道什么才是强大,它是对 Provider 的包装但是使用起来就像是全局变量一样简单,对于一般的状态管理完全够用,而且上手也非常容易,基本上找一篇教程就能用起来,而 Provider 我学了 4 个晚上才能勉强理解一点它的原理,否则你都不知道怎么用。
新手开发第四关:应用打包#
因为手上只有 Windows 电脑只能打包安卓应用和 Windows 应用。
如果从来没有弄过安卓应用的打包,过程还是比较麻烦的。打包 App 安装包最重要的就是配置签名,创建签名可以用 Android Studio 自带功能的来弄,但是网上的教程要么不完整要么看不懂,就放弃这个方法了,后面找了用命令行的方法创建签名,感觉这个比起前面的方式简单,不过也是要花点时间找教程和尝试,网上有很多教程是不完整的。
接着就按照网上教程配置打包时自动签名的代码,这部分照做就基本上可以了,刚开始弄的时候会熟悉要花费点时间,但是弄完之后基本上就是一次性,一个项目基本上只要配置一次就可以了。
Windows 应用打包就比较简单了,不需要任何配置,只需要一行打包命令行就可以了。
新手开发第五关:应用安装包分发#
正常一个应用完成需要上架各大应用商店进行分发,但是没有弄过的话备案还是挺费时间的,目前也完全没必要,具体怎么样不太清楚,但是可以用 [蒲公英] 应用内测分发平台,基本就是免费用,而且不需要备案。
最后#
基本上就简单的把 Flutter 整个应用项目的开发的过程总结了一下,整体开发下来这应该是我第一次完整的开发出一个 APP 在使用,上手程度比较简单的。
但是再深入下去对于一些复杂的应用来说不知道 Flutter 能不能应对,这个目前还不太了解。
对于业余的人来说 Flutter 是一个不错的选择,开发效率也不错的,已经有很多现成的东西做好,对于简单的小程序是完全没有问题。