我有三个问题(在列表下方)。
我的设置如下。我的屏幕包含一个包含两个项目的堆栈:
return Scaffold(
body: Stack(
children: <Widget>[
Positioned.fill( <--------------- FIRST CHILD
child: ASCIIPicture(widget._originalImage, image),
),
AnimatedBuilder( <--------------- SECOND CHILD
animation: _controller,
builder: (context, child) {
return Positioned(
bottom: _slideAnimation.value,
left: 0,
right: 0,
child: GestureDetector(
onTap: onSettingsTap,
onVerticalDragUpdate: onSettingsDrag,
onVerticalDragEnd: onSettingsDragEnd,
child: child,
),
);
},
child: ASCIIOptions( <- THE WIDGET THAT I DON'T WANT TO REBUILD
converter: widget._converter,
onUpdate: updateImage, <- CALLBACK function
),
)
],
),
);
ASCIIOptions小部件(第二个子级)允许用户更改一些配置。基于这些配置,第一个小部件(ASCIIPicture)显示不同的内容=>在更改配置时,第一个子项需要重建。为此,我将回调函数updateImage
传递给每次配置更改时都会被调用的ASCIIOptions。 updateImage
调用setState并更改第一个子代中使用的变量:
void updateImage() {
setState(() {
image = widget._converter.convertImage(widget._alphabet);
});
}
但是,当调用updateImage时,ASCIIPicture和ASCIIOptions都会重新生成。 我的问题:
我仍在尝试弄清楚小部件树的工作原理,如果我要问些琐碎的事情,我深表歉意。
答案 0 :(得分:1)
我假设当您说重建时,是指执行小部件的构建功能。如果是这样,每当父窗口小部件调用setState时,所有子窗口都将重建。但是,只有当它们被标记为脏(已更改)时,它们才会重新绘制/渲染。