在flutter中使用`Widget`或`WidgetBuilder`将widget作为参数传递给另一个widget有本质区别吗

问题描述 投票:0回答:1

假设我有一个小部件:

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 builder
1个回答
0
投票

是的,在 Flutter 中使用

Widget
WidgetBuilder
之间有几个本质区别:

  1. 施工方法:
    • 使用
      Widget
      ,您可以传递已构建的小部件的实例。
    • 使用
      WidgetBuilder
      ,您可以使用返回小部件的函数,从而允许延迟构造。
  2. 上下文处理:
      直接传递的
    • Widgets
      通常使用构建过程中给出的上下文。
    • WidgetBuilders
      可以创建和使用新的上下文,这对于访问继承的小部件或当上下文可能发生变化时非常有用。
  3. 重建能力:
    • Widgets
      直接传递一般不需要用新的上下文重建。
    • WidgetBuilders
      允许使用新上下文重建小部件,这对于某些场景可能是必要的。
  4. 用例:
    • Widgets
      适用于小部件的上下文足够且不需要更改的情况。
    • 当小部件需要新的上下文或可能更改的上下文特定信息时,
    • WidgetBuilders
      适合。
  5. 简单:
    • Widgets
      使用起来更简单、更直接。
    • 由于涉及到功能和上下文处理,
    • WidgetBuilders
      稍微复杂一些。
© www.soinside.com 2019 - 2024. All rights reserved.