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