Flutter垫片与扩展

3 dart flutter

ExpandedSpacerFlutter 和有什么不一样?为什么Flutter团队Spacer已经加入了Expanded

jam*_*lin 7

Expanded使其部件占据空间。

Spacer 自己占空间。

如果您查看 的实现Spacer,您会发现它是一个Expanded带有虚拟孩子的包装器。

是否Spacer真的有必要?可能不是。在另一个宇宙中,Expanded可以有一个可选的child参数。


小智 5

两者SpacerExpanded都执行相同的工作,即它们会填充诸如Row或的小部件中的剩余空间Column。以前Spacer,我们不得不使用

Expanded(child: Container())
Run Code Online (Sandbox Code Playgroud)

而且这不是很好。随着Spacer我们只需要使用

Spacer()
Run Code Online (Sandbox Code Playgroud)

因此,使用Spacer,可以防止我们编写更多的代码,并且还清楚地表明我们仅在使用它来填充剩余的空间。两者都有相同的属性flex,默认为1。唯一的区别是我们没有child有意义的属性。其实Spacer

Expanded(child: SizedBox.shrink());
Run Code Online (Sandbox Code Playgroud)

TL; DR

Spacer() 
Run Code Online (Sandbox Code Playgroud)

相当于

Expanded(child: Container())
Run Code Online (Sandbox Code Playgroud)