时隔一年,这回上岸了。
兜兜转转,从去年无意识的以单纯学习为目的了解了Flutter的设计思维到今年再一次上手多了一些体会。
每学习新知识都会经历一个过程,即
从陌生到熟悉,从熟悉到熟练。
个人的思考结果是这样的
- 首先明白setState,相当于触发刷新,全局的,我们也可以局部刷新,类似用到订阅者观察者思想的provider。如果是写mvvm的应该会很明白,写mvc,mvp的可能会很别扭,状态已经预先根据模型判断好了,这个在我没写mvvm之前刚接触flutter那会很抵触。
- 其次明白,一切皆Widget,此Widget不能单纯当作安卓的Widget或者View,你可以理解为这个东西可以是名词当作控件,也可以是形容词,具备装饰性。比如说,安卓我要给一个TextView加内边距,以前我们是在textview的属性内添加,但是flutter它并不统一,因为它不统一,可以说不规范也可以说灵活。
例如
Padding(padding: EdgeInsets.all(10),child: Text('哈哈哈哈哈'))
像Visiblity也是,你想要装饰一个东西,就把这个装饰放在外层,来装饰child,所以用中文思维就很好理解,以前我们用的英文思维,写代码的顺序是 文本,内边距18,现在是,内边距18的文本,后面你想加参数,有的会在Widget内部提供,没有的话就只能在外层包裹起来了。
- 明白Flutter debug条件下会比较卡,掉帧,release版本实际是比较流畅的。
- 你至少需要2个星期的时间,每天学习下,从复制粘贴改代码开始,然后慢慢地跟随自己的思想,查看方法参数去实现出来。这种陌生感褪去之后就只需要练就可以了。
学习路线备份如下。
- 老孟的组件概览,这个我是通读了一遍,不过码代码的时候还是得查,主要得先知道自己想要的功能是什么组件,才能根据组件查代码。不建议通读。
- pub插件库,跟github差不多。在pubspec.yaml里填写,目前用到的插件有
- 数据库 floor
- 极光推送 jpush_flutter
- 网络框架 dio
- 图片选择 image_picker,拍照或者选择图库照片
- 下拉刷新 pull_to_refresh
- 吐司 fluttertoast
- 数据共享 provider
- websocket web_socket_channel
- 翻转屏幕 auto_orientation
- 瀑布流 flutter_staggered_grid_view
- webview flutter_webview_plugin
- Banner carousel_slider (自己用PageView实现的话看这里)
- soketio socket_io_client
- 关于provider是什么原理可以看这个
https://book.flutterchina.club/chapter7/provider.html