【发布时间】:2019-06-01 03:08:39
【问题描述】:
Flutter 中 Expanded 和 Spacer 有什么区别?为什么 Flutter 团队在我们已经有 Expanded 的情况下添加了 Spacer?
【问题讨论】:
Flutter 中 Expanded 和 Spacer 有什么区别?为什么 Flutter 团队在我们已经有 Expanded 的情况下添加了 Spacer?
【问题讨论】:
Spacer 和 Expanded 都做同样的工作,即它们填满像 Row 或 Column 这样的小部件中的剩余空间。在Spacer之前,我们不得不使用
Expanded(child: Container())
这不是很好。对于Spacer,我们只需要使用
Spacer()
因此,使用Spacer,我们阻止了我们编写更多代码,它也清楚地表明我们只是在使用它来填充剩余空间。它们都具有flex 的相同属性,默认为1。唯一的区别是我们没有 child 有意义的属性。其实Spacer是
Expanded(child: SizedBox.shrink());
TL;DR
Spacer()
等价于
Expanded(child: Container())
【讨论】:
Expanded 使其 child 小部件占据空间。
Spacer 自己占用空间。
如果您查看implementation of Spacer,您会发现它是Expanded 的包装器,带有一个虚拟孩子。
Spacer 真的有必要吗?可能不是。在另一个宇宙中,Expanded 可以有一个可选的 child 参数。
【讨论】: