我在堆栈溢出上看到了这个帖子

Performance difference between widget function and class

哪里

class Option2 extends StatelessWidget {
  const Option2();

  Widget createDummyWidget() {
    return const Dummy();
  }

  @override
  Widget build(BuildContext context) {
    return SizedBox(
      child: createDummyWidget(),
    );
  }
}

会对性能产生影响,因为它可能会导致不必要的重建.但我想知道我有没有

class Option2 extends StatelessWidget {
  const Option2();

  @override
  Widget build(BuildContext context) {
    final myNonConstantWidget = Dummy();

    return SizedBox(
      child: myNonConstantWidget,
    );
  }
}

这是否会对性能产生同样的负面影响(进行那些不必要的重建)?或者它只是一个表演者

class Option2 extends StatelessWidget {
  const Option2();

  @override
  Widget build(BuildContext context) {    
    return SizedBox(
      child: Dummy(),
    );
  }
}

因为我看到这种情况经常发生在Flitters自己的窗口小部件中,所以我认为它不会对性能产生负面影响.

推荐答案

在性能方面,所有3个示例实际上都是相同的.

您在问题中提到的性能问题是关于StatefulWidget,其中当_counter变量被修改时,整个小部件将被重新构建.

提取方法本身对性能没有负面影响,但它会使代码更难阅读,在StatefulWidget的上下文中,它可能会导致您无法跟踪真正需要重新构建的内容.

在这种情况下,Ffltter(DART)建议您做对代码可读性最好的事情,而不要担心编译器将如何处理您的代码.

Flutter相关问答推荐

为什么Riverpod生成器在这种情况下不生成AsyncNotiator?

Flutter 隔离.使用多个参数运行

有没有什么方法可以加快在Flutter 中加载Quill HTML编辑器的速度?

Flex ListView用于可滚动和响应的页面

我怎样才能go 掉这个底部导航栏上的白色背景

如何翻转这种剪刀设计

Flutter Android Google Sign-in error:ApiException:10在确认软件包名称、SHA-1 fingerprint 和设置同意页面后出现异常

如何在Flutter中制作弯曲文本

使用现有Map方法对子类克隆方法的逻辑进行Dart标准化

如何在 Flutter 中创建具有渐变背景色的自定义 Snackbar?

如何给按钮的边框半径?

无法在 Flutter 项目中安装最新版本的 image_picker

像图像一样Flutter 自定义标签

Flutter 错误:OutletListModel类型的值不能分配给List类型的变量?

在 flutter 的另一个类中使用变量值

如何限制用户每 24 小时执行的操作数?

无法在Flutter 图像小部件中打开大尺寸(500MB)图像

扫描flutter生成的二维码后如何弹出文本字段值

try 为两个下拉值添加共享首选项,但在 Flutter 上显示错误断言失败:?

如何在flutter中共享容器和gridview之间的滚动条?