假设我有一个小部件:
class MyWidget {
final Widget? leading;
final WidgetBuilder? trailing;
Widget build(BuildContext context) {
return Row(
children: [
if(leading != null ) leading,
AnotherWidget(),
if(trailing != null) trailing(context),
],
);
}
我很好奇使用
WidgetBuilder
代替 Widget
来代替 trailing
有什么优点/缺点吗?
是的,在 Flutter 中使用
Widget
和 WidgetBuilder
之间有几个本质区别:
Widget
,您可以传递已构建的小部件的实例。WidgetBuilder
,您可以使用返回小部件的函数,从而允许延迟构造。Widgets
通常使用构建过程中给出的上下文。WidgetBuilders
可以创建和使用新的上下文,这对于访问继承的小部件或当上下文可能发生变化时非常有用。Widgets
直接传递一般不需要用新的上下文重建。WidgetBuilders
允许使用新上下文重建小部件,这对于某些场景可能是必要的。Widgets
适用于小部件的上下文足够且不需要更改的情况。WidgetBuilders
适合。Widgets
使用起来更简单、更直接。WidgetBuilders
稍微复杂一些。