Flutter 颤振中的构建上下文和状态对象

Flutter 颤振中的构建上下文和状态对象,flutter,Flutter,新创建的状态对象与BuildContext关联。这 关联是永久的:State对象永远不会更改其属性 构建上下文。但是,BuildContext本身可以在 树及其子树 这句话想说什么?我觉得这很微妙。它来自于flatter的官方文档,这里有很多核心概念,首先你需要了解flatter是如何呈现小部件的,我试着做一个总结 在运行时,Flatter内部管理三棵树以实现高性能:小部件树、元素树和RenderObject树 我不打算深入讨论,因为这很复杂,但基本上每棵树都有不同的职责: 小部件:描述元素的

新创建的状态对象与BuildContext关联。这 关联是永久的:State对象永远不会更改其属性 构建上下文。但是,BuildContext本身可以在 树及其子树


这句话想说什么?我觉得这很微妙。它来自于flatter的官方文档,这里有很多核心概念,首先你需要了解flatter是如何呈现小部件的,我试着做一个总结

在运行时,Flatter内部管理三棵树以实现高性能:小部件树、元素树和RenderObject树

我不打算深入讨论,因为这很复杂,但基本上每棵树都有不同的职责:

  • 小部件:描述元素的配置。它处理 配置

  • 元素:窗口中特定位置的小部件的实例化 树。它管理生命周期

  • RenderObject:处理大小、布局等。它处理渲染和 绘画方面

因此,对于每个小部件,flatter都会构建相应的元素并构建元素树

对于无状态小部件,小部件和相应元素之间的关系很简单,但是对于有状态小部件,底层元素结构看起来有点不同。这些元素添加了一个状态对象,它保存配置的可变部分,例如颜色

您应该知道的另一件事是,BuildContext实际上是一个元素

考虑到这一点,其含义如下:

新创建的状态对象与BuildContext关联。这 关联是永久的:State对象永远不会更改其属性 构建上下文。但是,BuildContext本身可以在 树及其子树

它试图说,当您构建一个有状态的小部件时,flatter将构建一个BuildContext(一个包含小部件位置以及其他属性的元素),并且context将包含可变状态对象

然后buildContext(元素)本身可以更改(例如在树上移动),但是永远不会发生的事情是更改state对象将更改buildContext。这就是为什么您可以更改,例如,小部件颜色或状态对象上的任何可变属性,并且它永远不会更改元素在树中的位置

这是一个非常有趣的话题,但并不简单。我强烈建议你检查这个和这个,对这个有一个深刻的解释


希望有帮助

你在哪里找到的?你能包含一个链接吗?它来自于州的生命周期定义。你是说元素可以在元素树上移动吗?