Flutter 在小部件树中将逻辑向上移动

Flutter 在小部件树中将逻辑向上移动,flutter,refactoring,Flutter,Refactoring,这样写是否更好: Column(children: [ if (_isSignUp) TextFieldView( key: firstNameKey, label: "First Name", ) else SizedBox.shrink(), if (_isSign

这样写是否更好:

 Column(children: [
                    if (_isSignUp) TextFieldView(
                      key: firstNameKey,
                      label: "First Name",
                    ) else SizedBox.shrink(),
                    if (_isSignUp) TextFieldView(
                      key: lastNameKey,
                      label: "Last name",
                    ) else SizedBox.shrink(),
                  ],),
或者这个:

_isSignUp ? Column(children: [
                        TextFieldView(
                          key: firstNameKey,
                          label: "First Name",
                        ),
                        TextFieldView(
                          key: lastNameKey,
                          label: "Last name",
                        ),
                      ],) : SizedBox.shrink()

是否与开闭原理有关?我相信第二个例子是一种更好的做事方式,但为什么呢?我们什么时候创建一个新的widget?什么时候引入一个新的if语句更好?

我认为没有专门的技术术语来描述它,因为它们只是条件语句。 至于性能,第二种方法是一种更好的
方法,因为一个大小合适的框(布局)比一个列便宜,但是flatter确实擅长绘制小部件。但若你们不想浪费任何CPU周期,你们可以使用这个软件包

在这里,我将努力实现可维护性,并选择示例2。 因为从列中不断添加和删除项目更容易

您可以做的另一种方法是将小部件创建提取到一个方法中,以防出现更复杂的情况

列(子项:[
…MyComplementedMethod()
],),
列出myComplementedMethod(){
返回[if(_isSignUp)text字段视图(
key:firstNameKey,
标签:“名字”,
)else SizedBox.shrink(),
如果(_isSignUp)文本字段视图(
key:lastNameKey,
标签:“姓氏”,
)else SizedBox.shrink(),]
}

两者都没有区别,但我们更喜欢三元,因为我们需要按更少的键来实现它。而且它很容易阅读,所以选择B:p