架构和三棵树
▼30 秒版
Flutter 自己画,不用系统按钮那些,所以两端长得一样。上面写 Dart,底下 C++ 引擎在画像素,再往下才对接安卓 iOS。
Widget 就是一张说明书,扔了再建也没事。真正活着的是 Element,状态在它身上。布局绘制是 RenderObject。所以界面在刷,不代表底下全拆了。
追问
为什么要拆三棵?
说明书便宜,可以一直换。状态得有个地方住,绘制又重,不能跟着换。所以拆开了。
一帧怎么走?
先动画,再 build 脏的那些,再量尺寸,再画,最后引擎上屏。哪边超了十六毫秒都会卡。
Widget 为啥不能改?
改不动才能放心重建。状态放 State 上,不放 Widget 上。
setState 刷多大?
从你调用的那个往下刷。底下是 const 的,它会跳过。
BuildContext 是啥?
就是 Element 自己。拿 Theme、找 Navigator,都是顺着它往上摸。
跟 RN 比?
RN 套系统控件。Flutter 自己画。要嵌系统控件,才走 PlatformView。