作者回复: 实际上你即使不去主动setState,对于Stateful在特定的时机也会rebuild的。具体可以参看下一篇文章
作者回复: 是的
作者回复: 是的
作者回复: 1.Widget通知Element重建的触发时机,可以参考第11篇生命周期的分享。
2.一旦Widget触发重建,Element会根据重建前后Widget树的渲染类型及属性变化情况,决定后续的复用、新建过程:比如Widget树中仅仅是调整了一个渲染样式,Flutter会通知Element直接复用现有节点,同步属性至RenderObject,触发绘制即可;如果Widget树中涉及到Widget类型的替换或变更,Flutter则会将老的Element及RenderObject摘除,让新的Widget重新走一遍创建Element和RenderObject的流程,挂载到Element树和RenderObject树上。
作者回复: 是类似的概念
作者回复: 确实,1.5还有,1.7已经把这个方法替换掉了。
作者回复: 不是的哈。
1.重绘边界是解决同层Widget(有兄弟、有父子)之间渲染依赖出现的概念:即只要他们享用了同一个layer,则无论哪一个需要重绘,整个layer都会受到影响。
2.StatefulWidget则影响的是其子节点,一般情况下只影响重建,Element会在底层做diff,确保没有修改的不会重绘
作者回复: 因为simple is best,另外Element已经拦截不必要的绘制了
作者回复: 拆小就行了
作者回复: 靠类型和key
作者回复: 会讲一部分
作者回复: “但,大量的Widget对象的销毁重建是无法避免的”
作者回复: 这些都是不参与绘制/布局的widget
作者回复: 泛型
作者回复: ImageStream,图片加载完成。
作者回复: 你可以在他们的父Widget之上定义一个controller去中转;也可以通过event bus搞定。
作者回复: State中持有的,用于界面渲染的数据
作者回复: 1.key用在Element复用过程中,控制控件如何取代树中的另一个控件。比如你在父Widget用新的image重建了Image,底层Element还是能复用的。
2.assert是断言,只在debug中生效。
3.super我们在Dart里面讲过,是调用父类的构造方法