本人android开发出生,所以,我以先入为主的思维来搞flutter
接下来就开始说说我对软件开发的理解
普通的软件开发所需要掌握的东西:
1.对基础widget的掌握,不要看着有300多个widget,android上我熟练掌握的也就常用的那几个,但足以开发各种项目。一个再大的项目,实际上也就那么几个widget,列表、横向、竖向、重叠,没啥了吧,还有啥骚操作吗,我觉得就跟前端的只用flex布局就能搞一个项目一个道理
2.掌握网络请求 dio,请求嘛就那些get post啥的没啥好说的
3.状态管理、掌握页面刷新 ,毕竟是做软件,最重要的就是页面的数据交互,我将继续使用eventbus
4.图片加载 ,各种widget自身就满足了,不需要再用到android中的glide这种东西
5.列表的adapter,android中各种大神封装的adapter,比如CymChad:BaseRecyclerViewAdapterHelper,到flutter上发现不需要这些东西,遍历一下widget就行了,跟uniapp中的for循环添加列表有点像呢,话说自从用了uniapp之后,发现前端真的比原生开发简单,简单到无与伦比,妈的uniapp还可以一键打包到各种平台,我也是醉了
6.掌握json如何处理,FlutterJsonBeanFactory来构造对象,用json.decode来解析,相对于android的new Gson还是简便了些吧
7.再说说状态管理,说白了就是widget的刷新,与android中的textView.setText("xxxx数据")一样,但是在flutter中没有直接拿widget.setText类似的方法,要比安卓中复杂很多,研究了很久,发现有个比较好用的--databus,封装的StreamBuilder,目前我认为最简单的页面刷新方法,啥redux、provider之类的太复杂了,暂时无法接受
8.随着Flutter 2.0的到来,我将项目运行到了谷歌浏览器上,跟手机端效果是一致的!屌啊!
注:打包web仔细阅读官方文档:https://flutter.dev/docs/get-started/web , 如果flutter create .报错,则使用这个方法:flutter create --org package_name . 。特别注意,这最后面有一个点
9.关于绘制
Canvas里的两个重要方法,一直很疑惑。 save和restore方法是成对出现的,但是restore必然对应一个save方法。save方法保存的是save之前的画图动作,而restore则负责恢复对应的save保存的工作。 举个例子,假如在save之后执行了旋转Canvas的操作,不执行restore操作的话,之后画布操作都是在旋转之后的画布上的进行的,但是我们不想这样做,那我们需要在旋转之后执行restore方法,这样我们就可以在恢复save之前的画布,进行操作(但是旋转之后的画布状态也是保存下来的)
看到一篇解释:https://stackoverflow.com/questions/59650399/what-is-canvas-save-and-canvas-restore
This allows you to restore the state before the most recent entry on the save stack, i.e. it "Pops the current save stack". This means that any transformations and clips done to the canvas in the current state will be removed and if saveLayer
was used, the saved layer will be composited into the canvas (the draw order will remain the same).
待续