在Flutter中,build函数有可能会创建新的小部件,也有可能会复用已有的小部件。具体判断渲染的方式则取决于小部件的类型。
举个例子,如果是一个静态的小部件,则build函数只会在第一次渲染的时候创建一个小部件,之后会直接复用。
如果是一个动态的小部件,例如一个带有文本输入框的表单,则每次调用setState时,build函数都会重新创建一个新的小部件。
下面是一个示例,演示了如何在build函数中复用现有小部件。
class MyWidget extends StatefulWidget { MyWidget({Key key}) : super(key: key);
@override _MyWidgetState createState() => _MyWidgetState(); }
class _MyWidgetState extends State
@override Widget build(BuildContext context) { // 如果_textWidget尚未被创建,则创建一个新的Text小部件并存储它 if (_textWidget == null) { _textWidget = Text('Hello, world!'); }
// 返回已创建的或新创建的Text小部件
return _textWidget;
} }
在上述示例中,_textWidget变量被用来存储已创建的Text小部件,如果该变量为空,则build函数会创建一个新的Text小部件,并将其存储在变量中。在下一次渲染时,_textWidget变量中已存储了一个小部件,因此build函数会直接返回已经创建的小部件,而不是再一次创建新的小部件。