重构题:Extract as widget/method/variable...有什么优缺点?

Refactoring question: Extract as widget/method/variable... What are pros and cons?

他们三个基本上做同样的事情。最佳做法是什么?在什么情况下我应该使用哪种提取方式?标准是什么?

我想这些可能是重要的几点:

示例:

提取容器。您更喜欢哪种方式,为什么?

class Example extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

1。将容器提取为小部件(+6 行):

class Example extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ExtractedAsWidget();
  }
}

class ExtractedAsWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

2。将容器提取为方法(+1(在某些情况下为 3)行):

class Example extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return buildContainer();
  }

  Container buildContainer() => Container();
}

3。将容器提取为变量(+1 行):

class Example extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var container = Container();
        return container;
  }
}

提取为 Widget 是最佳实践,因为 Flutter 框架可以优化小部件而不是方法或变量。但是对于这种特殊情况,我会将 Container 提取为 method。提取为 Widget 太过分了。

提取为变量

提取为 variable 只应在您的小部件固定时执行,仅在单个文件中使用并且不需要任何参数。

提取为方法

当您的小部件仅在单个文件中使用时,应提取为 method(并且它还可以使用一些参数进行额外的自定义)。它还增加了代码的可读性。

提取为小部件

提取为 Widget 是创建在不同文件中多次使用的小部件的最佳方法。 Flutter 建议尽可能多地创建 StatelessWidget

我能建议的最简单的例子是按钮的使用。每个应用程序都有一个我们使用的固定原色按钮。因此,我们应该创建该按钮的 StatelessWidget 并在我们应用的多个屏幕中使用它,而不是创建变量或方法。