Flutter 渲染 Widget 源码解析

2020-12-14  本文已影响0人  Lin__Chuan

先看一段简单的代码

void main() => runApp(
  Center(
    child: RichText(
      textDirection: TextDirection.ltr,
      text: TextSpan(
          text: "你好, Jack",
      ),
    ),
  ),
);

显示


image.png

通过在浏览器中查看 Dart DevTools, 可以发现这里有三个Widget, 层级关系分别是 Root -> Center -> RichText.


image.png

我们通过跟踪源码看看 Widget 到底是怎么渲染到屏幕上去的.

image.png image.png

总结:

Flutter 中有三种树结构用来渲染界面.

再来看看真实的渲染对象.


image.png

有几点需要注意


在创建Widget的时候, 总是会看到一个 key 的参数, 它是怎么使用的呢?

在抽象类 Widget 的源码中我们能看到

abstract class Widget extends DiagnosticableTree {
    ...
    final Key key;
    
    static bool canUpdate(Widget oldWidget, Widget newWidget) {
    return oldWidget.runtimeType == newWidget.runtimeType
        && oldWidget.key == newWidget.key;
   }
}
上一篇下一篇

猜你喜欢

热点阅读