学习和使用 Flutter 断断续续也有近一年的时间了,但是总感觉欠缺着什么,对的,就是对于原理的理解。关于 Flutter 的原理的理解意义可以从两个方面来思考,一方面是对于面试,因为现在面对的找工作环境是越来越卷,仅仅从会API层面来讲作出一个能用的 App 是远远不够的,还必须能够回答出 Flutter相关的原理才行,第二方面是自我的能力的提升和满足自己的好奇心,比如Flutter 是如何渲染到手机屏幕上的,比如Flutter简单理解就是一个UI框架,并不能够进行调用系统的原生能力,但是如何通过插件就能够完成比如定位、存储、音视频多媒体播放等功能。如果说这些仅仅是如何实现Android原生本来就有的功能,那么对于自渲染的这套框架,又是如何组织起来的,又是如何渲染到屏幕上的,有哪些可以优化点,相当于Android原生,有哪些可以借鉴过来的,比如打点日志、网络请求、网络请求拦截器、组件化、MVVM框架。
从上面的思考可以看出有很多可以重新思考的地方,那么就需要整理和归纳,进而理解整清楚整个Flutter的学习和思考框架模型。以下是具体的思考点,对应的都会有专门的博客来解答疑点。
思考点可以从在实践过程中遇到的问题来展开,这样就可以更加深刻的理解整个系统的运行原理,而不是纯粹为了面试或者好奇心来学习这个东西,如果这么搞,太枯燥了,也没有多大的兴趣支撑。
思考题:
1. 为什么要使用 widget.url 来获取更新的数据,而不是用从 StatefulWidget 传递到 State 的url来更新数据??
2. Flutter 项目开发过程中为什么 【Key? key】key 可以为空?什么时候 key 不能为空?key是干嘛的?GlobalKey 、ValueKey、LocakKey 的区别是什么?
3. BuildContext 在很多地方都用,但是这个东西是做什么的?比如 Navigator.of(context).pop() 等方法都会用到?
4. StatelessWidget 和 StatefulWidget 的区别是什么?为什么说能用 StatelessWidget 就不用StatefulWidget ?
5. SatefulWidget的生命周期是什么?有哪些?都会在什么时候调用?
6. Widget、Element、RenderObject、Layer 分别是什么?有什么联系?
7. Sliver 这东西看着挺高大上的,名字看着也洋气,但是是什么?怎么用?
8. ViewPort 是干嘛的?视口?视口的意思就是能看的到的区域?
9. Android 中有滑动冲突,那么在Flutter中有没有?如果有怎么解决的?
10. Flutter 绘图机制是什么?和Android一样吗?都是父传子给约束条件,然后子控件完成测量之后,给父布局以尺寸大小?
11. Flutter的状态管理框架 InheritedWidget 的实现原理是什么?为什么子控件可以父控件的数据?
12. Flutter的状态管理框架 Provider 的实现原理是什么?
13. Flutter与Nativ端的数据交互是怎么实现的?
暂时就想到这么多,后面有时间就会补充上来,并解答这些疑惑。